Поиск

Полнотекстовый поиск:
Где искать:
везде
только в названии
только в тексте
Выводить:
описание
слова в тексте
только заголовок

Рекомендуем ознакомиться

'Автореферат'
Защита состоится 2 июля 2009 года в 14.00 часов на заседании Диссертационного совета Д.002.009.01 Института экономики РАН по адресу: 117218, Москва, ...полностью>>
'Документ'
Начало экономической реформы относится к концу 1978 г., когда 3-й пленум ЦК КПК 11-го созыва объявил о проведении в жизнь политики “реформы и открыто...полностью>>
'Документ'
технических средств, включая автомототранспорт, материалов, которые не могут быть использованы иначе как для профилактики инвалидности и реабилитации...полностью>>
'Документ'
— У нас к вам просьба — проконсультировать и, если будет нужно, положить в клинику нашего сотрудника. Вы, наверное, слышали о Сергее Борзенко? Извест...полностью>>

Курс 2 Семестр 3 Лекции: 36 (часа) Лабораторные работы: 18(часов) Составитель к ф. м н. доцент Харитонов С. И. Самара 2010

Главная > Лекции
Сохрани ссылку в одной из сетей:

ОБЩЕСТВЕННАЯ ОРГАНИЗАЦИЯ

САМАРСКИЙ ВОЛЬНЫЙ УНИВЕРСИТЕТ

Лабораторные работы

По дисциплине " Компьютерные телекоммуникации» для направления 511600 - прикладная математика и физика

Форма обучения - дневная

Курс 2

Семестр 3

Лекции: 36 (часа)

Лабораторные работы: 18(часов)

Составитель к.ф.-м.н. доцент Харитонов С.И.

САМАРА 2010

Внимание!!!

Зачет принимается только 1 раз.

Повторная сдача после сессии.

Порядок сдачи лабораторных работ.

Обратить особое внимание на оформление текста программ!!!

1.Каждая программа должна иметь help для работы с ней.

В нем должны быть следующие пункты

    1. Что она делает

    2. Какие параметры программа получает на вход

    3. Какие параметры получаются на выходе.

    4. Как скомпилировать исходный текст (в файле readme)

    5. Help должен вызываться следующим образом

Имя_программы –help

2. К каждой программе должны быть приложены тесты, которые показывают, что программа считает правильно.

Тесты должны быть описаны в файле testme

3. Клиент и сервер должен работать постоянно и заканчивать свою работу по команде от клиента т.е чтобы прервать работу с сервера необходимо набрать команду от клиента .

Если студент приходит с программой оформление которой не удовлетворяет вышеизложенным требованиям он не получает зачет (даже в случае работающей программы).

Пароли для гостевых пользователей

student:cnpk68GGokub

student1:ck2brnFKpnd0

student2:kbuvi3bQLq8e

student3:PM6ud8nwexrc

student4:Prx3egvr1ohZ

student5:Tvleaf4pn0tK

student6:cqsrrk76sUWs

Лабораторные работы по курсу “Компьютерные телекоммуникации”

Лабораторная работа 1

Работа в операционной системе LINUX. Отладка и компиляция простейшей программы

1 Метод Гаусса для решения систем уравнений

2 Метод Симпсона для вычисления интегралов

3 Метод простой итерации для трансиндентных уравнений

4 Метод Ньютона для трансиндентных уравнений

5 Вычисление градиента двумерной функции

6 Обращение матрицы

7 Нахождение корней полинома

8 Решение дифференциального уравнения методом Эйлера

9 Решение дифференциального уравнения методом Рунге-Кутта

10 Вычисление функции Бесселя

11 Вычисление сферических функции Бесселя

12 Вычисление полиномов Эрмита

13 Вычисление полиномов Чебышева

14 Вычисление интеграла вероятности

15 Вычисление интегралов Френеля

16 Вычисление модифицированных функции Бесселя

Вызов файлового менеджера mc

Создание файла touch filename.c

Компиляция производится с помощью команды

gcc –lm –o outputfile inputfile

Порядок выполнение лабораторной работы

  1. Разработка метода вычислений

  2. Разработка пользовательского интерфейса(интерфейс командной строки). Интерфейс должен включать ввод и вывод с экрана а такжеиз файла параметров

  3. Написание кода

  4. Отладка программы

  5. Тестирование программы

Лабораторная работа 2

Изучение системных вызовов для работы с файлами

1 Копирование, перемещение, удаление файлов с помощью системных вызовов.

2 Получение информации о файле.

3 Создание файла с заданными правами

4 Разбиение файла на несколько для записи на дискету.

5 Соединение нескольких файлов в один

Лабораторная работа 3(вариант совпадает с номером варианта лабораторной 1)

Передача данных с помощью именованных и неименованных каналов

Простейшее клиент-серверное приложение

Клиент получает данные от пользователя и передает их серверу.

Сервер вычислительную задачу и передает клиенту результат вычислений.

Клиент выводит результат.

Порядок выполнение лабораторной работы

  1. Разработка метода вычислений

  2. Разработка пользовательского интерфейса(интерфейс командной строки). Интерфейс должен включать ввод и вывод с экрана а такжеиз файла параметров

  3. Разработка клиент серверного приложения

  4. Написание кода

  5. Отладка программы

  6. Тестирование программы

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

#define FIFO "fifo1"

#define MAXBUF 80

int main (){

int writefd ,n;

char buff[MAXBUF];

char msg[]= "Здравствуй мир!\n";

if(writefd=open(FIFO,O_WRONLY)<0) {

printf("Невозможно открыть FIFO \n"); exit(1);

}

if(write(writefd,msg,16)!=16){

printf("Ошибка записи \n"); exit(1);

}

close(writefd);

if(unlink(FIFO)<0){

printf("невозможно удалить FIFO \n"); exit(1);

}

exit(0);

}

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

#define FIFO "fifo1"

#define MAXBUF 80

int main (){

int readfd ,n;

char buff[MAXBUF];

if(mknod(FIFO,S_IFIFO | 0666,0)<0) {

printf("Невозможно создать FIFO \n"); exit(1);

}

if(readfd=open(FIFO,O_RDONLY)<0) {

printf("Невозможно открыть FIFO \n"); exit(1);

}

while ((n=read(readfd,buff,MAXBUF))>0){

if(write(1,buff,n)!=n){

printf("Ошибка ввода \n"); exit(1);

}

}

printf("\n");

close(readfd);

exit(0);

}

Программа-обработчик сигналов в LINUX.(При выполнении лабораторной работы обработчик сигнала –вычислительная программа)

#include<signal.h>

#include<stdio.h>

#include<unistd.h>

#include<sys/types.h>

int ntimes=0;

main(){

pid_t pid,ppid;

void p_action(int),c_action(int);

static struct sigaction pact,cact;

pact.sa_handler=p_action;

sigaction(SIGUSR1,&pact,NULL);

switch(pid=fork()){

case -1:

perror("syncro");

exit(1);

case 0:

cact.sa_handler=c_action;

sigaction(SIGUSR1,&cact,NULL);

ppid=getppid();

for(;;){

sleep(1);

kill(ppid,SIGUSR1);

pause();

}

default:

for(;;){

pause();

sleep(1);

kill(pid,SIGUSR1);

}

}

}

void p_action(int sig){

printf("Родительский процесс получил сигнал#%d\n",ntimes++);

}

void c_action(int sig){

printf("Дочерний процесс получил сигнал#%d\n",ntimes++);

}

Лабораторная работа 4(вариант совпадает с номером варианта в лабораторной 1)

Передача данных с помощью сокетов UNIX и сокетов INTERNET.

Простейшее клиент-серверное приложение

Клиент получает данные от пользователя и передает их серверу.

Сервер вычислительную задачу и передает клиенту результат вычислений.

Клиент выводит результат.

  1. Разработка метода вычислений

  2. Разработка пользовательского интерфейса(интерфейс командной строки). Интерфейс должен включать ввод и вывод с экрана а такжеиз файла параметров

  3. Разработка клиент серверного приложения

  4. Написание кода

  5. Отладка программы

  6. Тестирование программы

#include <sys/types.h>

#include<sys/socket.h>

#include<sys/un.h>

#include<stdlib.h>

#define MAXBUF 256

char *msg="Здравствуй Мир!\n";

char buf[MAXBUF];

int main() {

struct sockaddr_un serv_addr,clnt_addr;

int sockfd;

int saddrlen,caddrlen,msglen,n;

bzero(&serv_addr,sizeof(serv_addr));

n_family=AF_UNIX;

strcpy(n_path,"./echo.server");

saddrlen=sizeof( n_family)+strlen(n_path);

if((sockfd=socket(AF_UNIX,SOCK_DGRAM,0))<0){

printf("невозможно создать сокет\n");exit(1);

}

bzero(&clnt_addr,sizeof(clnt_addr));

n_family=AF_UNIX;

strcpy(n_path,"/tmp/clnt.XXXX");

mktemp(n_path);

caddrlen=sizeof(n_family)+strlen(n_path);

if(bind(sockfd,(struct sockaddr *)&clnt_addr,caddrlen)<0){

printf("Ошибка связывания сокета\n");exit(1);

}

msglen=strlen(msg);

if(sendto(sockfd,msg,msglen,0,(struct sockaddr*)&serv_addr,saddrlen)!=msglen){

printf("Ошибка передачи сообщения\n"); exit(1);

}

if((n=recvfrom(sockfd,buf,MAXBUF,0,NULL,0))<0){

printf("Ошибка получения сообщения\n");exit(1);

}

printf("Эхо:%s\n",buf);

close (sockfd);

unlink(n_path);

exit(0);

}

#include <sys/types.h>

#include<sys/socket.h>

#include<sys/un.h>

#include<stdlib.h>

#define MAXBUF 256

char *msg="Здравствуй Мир!\n";

char buf[MAXBUF];

int main() {

struct sockaddr_un serv_addr,clnt_addr;

int sockfd;

int saddrlen,caddrlen,max_caddrlen,n,m;

if((sockfd=socket(AF_UNIX,SOCK_DGRAM,0))<0){

printf("невозможно создать сокет\n");exit(1);

}

unlink("./echo.server");

bzero(&serv_addr,sizeof(serv_addr));

n_family=AF_UNIX;

strcpy(n_path,"./echo.server");

saddrlen=sizeof( n_family)+strlen(n_path);

if(bind(sockfd,(struct sockaddr*)&serv_addr,saddrlen)<0){

printf("Ошибка связывания сокета с адресом\n");exit(1);

}

max_caddrlen=sizeof(clnt_addr);

for(; ;){

caddrlen=max_caddrlen;

n=recvfrom(sockfd,buf,MAXBUF,0,(struct sockaddr_un *)&clnt_addr,&caddrlen);

printf("Сообщение:\%s n=%d\n",buf,n);

if(n<0){

printf("Ошибка приема\n");exit(1);

}

m=sendto(sockfd,buf,n,0,(struct sockaddr *)&clnt_addr,caddrlen);

printf("m=%d\n",m);

if(m!=n){

printf("Ошибка передачи сообщения\n"); exit(1);

}

}

printf("конец\n");

}

Передача данных с помощью сокетов UNIX и сокетов INTERNET.

Простейшее клиент-серверное приложение

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <stdio.h>

#include <fcntl.h>

#include <netdb.h>

#define PORTNUM 1500

main(int argc, char *argv[]){

int s, ns,i;

int nport,pid;

struct sockaddr_in serv_addr, clnt_addr;

struct hostent *hp;

char buf[80]="Здравствуй Мир", hname[80];

unsigned short int nport_;

if((hp=gethostbyname(argv[1]))==0){

perror("Ошибка вызова gethostbyname() "); exit(3);

}

nport=PORTNUM;

nport_=nport;

bzero(&serv_addr,sizeof(serv_addr));

bcopy(hp->h_addr,&serv_addr.sin_addr,hp->h_length);

serv_addr.sin_family=hp->h_addrtype;

serv_addr.sin_port=htons(nport_);

if((s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==-1){

perror("Ошибка вызова socket()"); exit(1);

}

fprintf(stderr,"IP-адрес сервера:%s\n",inet_ntoa(serv_addr.sin_addr));

if(connect(s,(struct sockaddr_in *)&serv_addr, sizeof(serv_addr))==-1){

perror("Ошибка вызова connect()"); exit(1);

}

send(s,buf,sizeof(buf),0);

if (recv(s,buf,sizeof(buf),0)<0) {

perror("Ошибка вызова recv()"); exit(1);

}

printf("Получено от сервера:%s\n",buf);

close(s);

printf("Клиент завершил работу\n\n");

}

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <stdio.h>

#include <fcntl.h>

#include <netdb.h>

#define PORTNUM 1501

main(int argc, char *argv[]){

int s, ns;

int nport,pid;

struct sockaddr_in serv_addr, clnt_addr;

struct hostent *hp;

char buf[80], hname[80];

unsigned short int nport_;

nport=PORTNUM;

nport_=nport;

nport_=htons(nport_);

/* if((hp=gethostbyname(argv[1]))==0){

perror("Ошибка вызова gethostbyname() "); exit(1);

}*/

if((s=socket(AF_INET,SOCK_STREAM,0))==-1){

perror("Ошибка вызова socket()"); exit(1);

}

bzero(&serv_addr,sizeof(serv_addr));

/* bcopy(hp->h_addr,&serv_addr.sin_addr,hp->h_length);*/

serv_addr.sin_family=AF_INET;

serv_addr.sin_addr.s_addr=INADDR_ANY;

serv_addr.sin_port=nport_;

if(bind(s,(struct sockaddr *)&serv_addr,sizeof(serv_addr))==-1){

perror("Ошибка вызова bind()");exit(1);

}

fprintf(stderr,"Сервер готов:%s\n",inet_ntoa(serv_addr.sin_addr));

if (listen(s,5)==-1){

perror("Ошибка вызова listen()"); exit(1);

}

while(1){

int addrlen;

bzero(&clnt_addr,sizeof(clnt_addr));

addrlen=sizeof(clnt_addr);

if((ns=accept(s,(struct sockaddr *)&clnt_addr,&addrlen))==-1){

perror("Ошибка вызова accept()"); exit(1);

}

fprintf(stderr,"IP-адрес клиента=%s\n",inet_ntoa(clnt_addr.sin_addr));

if((pid=fork())==-1){

perror("Ошибка вызова fork()"); exit();

}

if (pid==0){

int nbytes;

int fout;

close(s);

while((nbytes=recv(ns,buf,sizeof(buf),0))!=0) {

send(ns,buf,nbytes,0);

}

close(ns);

exit(0);

}

close(ns);

}

}

Лабораторная работа 5(вариант совпадает с номером варианта в лабораторной 1)

Написание и отладка простейшей CGI-программы

Клиент получает данные от пользователя и передает их серверу.

Сервер вычислительную задачу и передает клиенту результат вычислений.

Клиент выводит результат.

  1. Разработка метода вычислений

  2. Разработка пользовательского интерфейса(web-интерфейс )

  3. Разработка клиент серверного приложения

  4. Написание кода

  5. Отладка программы

  6. Тестирование программы

#include<string.h>

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#define MAXSIZE 255

int main (){

struct param {

char *name,*value;};

struct param prm[MAXSIZE];

char str[MAXSIZE];

char* tok,*p,*str1;

int switchval=0;

char *ptr_paramname,*ptr_paramvalue;

int i=0,xorder;

double xleft,xright,xstep,x;

if(fgets(str,MAXSIZE,stdin)!=0) {

printf ("Content-type: text/html\n");

printf ("\n");

printf ("<html>");

printf ("<head> <title>Расчет специальных функций</title>");

printf ("</head>");

printf ("<body>");

printf("<H2>Расчет специальных функций</H2>");

/* printf("Исходная строка %s \n",str);*/

printf("<p>");

p=str;

while(*p!=0){

tok=strtok(p,"&");

str1=tok+strlen(tok)+1;

ptr_paramname=strtok(p,"=");

ptr_paramvalue=ptr_paramname+strlen(ptr_paramname)+1;

p=str1;

prm[i].name=ptr_paramname;

prm[i].value=ptr_paramvalue;

// printf("<H3>Имя поля: %s, значение поля: %s </H3>",prm[i].name,prm[i].value);

i++;

}

xleft=(double)atof(prm[0].value);

xright=(double)atof(prm[1].value);

xstep=(double)atof(prm[2].value);

xorder=atoi(prm[3].value);

if(strcmp(prm[4].value,"Bessel\0")==0){

switchval=1;

printf("<H2>Расчет функций Бесселя</H2>");

}

if(strcmp(prm[4].value,"Neiman\0")==0){

switchval=2;

printf("<H2>Расчет функций Неймана</H2>");

}

if(strcmp(prm[4].value,"Gamma\0")==0){

switchval=3;

printf("<H2>Расчет Гамма-функции</H2>");

}

if(strcmp(prm[4].value,"Erf\0")==0){

switchval=4;

printf("<H2>Расчет функции ошибок</H2>");

}

printf("<H3>Левая граница: %f,</H3>",xleft);

printf("<H3>Правая граница: %f,</H3>",xright);

printf("<H3>Шаг: %f,</H3>",xstep);

printf("<H3>Порядок функции: %d,</H3>",xorder);

x=xleft;

// printf("<H3>Переключатель %d,</H3>",switchval);

while(x<=xright){

switch(switchval){

case 1:

printf("<H3>x=%f %f ",x,jn(xorder,x));

break;

case 2:

printf("<H3>x=%f %f ",x,yn(xorder,x));

break;

case 3:

printf("<H3>x=%f %f ",x,exp(gamma(x)));

break;

case 4:

printf("<H3>x=%f %f ",x,erf(x));

break;

default:

break;

}

x=x+xstep;

}

system("(echo \"set terminal gif\"; echo \"plot cos(x)\")|gnuplot > /var/lib/apache/htdocs/prognoz/3.gif ");

printf("<p><IMG SRC=\"/prognoz/3.gif\" HEIGHT=240 WIDTH=200 ALIGN=CENTER></p>");

printf ("</body>");

printf ("</html>");

}

else {

printf ("Content-type: text/html\n");

printf ("\n");

printf ("<html>");

printf ("<head> <title>Расчет специальных функций</title>");

printf ("</head>");

printf ("<body>");

printf("<H2>Расчет специальных функций</H2>");

printf ("<form method=post action=\"/cgi-bin/prognoz/testc/a.out\">");

printf ("<p>Левая граница: <input type=\"text\" name=\"name1\" size=\"20\" value=\"0\"></p>");

printf ("<p>Правая граница <input type=\"text\" name=\"name2\" size=\"20\" value=\"1\"></p>");

printf ("<p>Шаг <input type=\"text\" name=\"name3\" size=\"20\" value=\"0.1\"></p>");

printf ("<p>Порядок функции<input type=\"text\" name=\"name4\" size=\"20\" value=\"0\"></p>");

printf ("<p>Название функции");

printf ("<SELECT name=\"name5\" ");

printf("<OPTION>Choose function");

printf("<OPTION>Bessel");

printf("<OPTION>Neiman");

printf("<OPTION>Gamma");

printf("<OPTION>Erf");

printf("</SELECT>");

printf ("<p><input type=\"submit\" name=\"send\" value=\"Submit Form\"></p>");

printf ("</form>");

printf ("</body>");

printf ("</html>");

}

}

Приложение 1

Межпроцессное взаимодействие с помощью неименованных каналов

#include <unistd.h>

#include <sys/types.h>

#include <error.h>

#include <stdio.h>

#define MSGSIZE 16

char msg1[]="Привет Сергей";

char msg2[]="Привет Ксюша";

char msg3[]="Привет Лена";

int fatal(char* s){

perror(s);

exit(1);

}

main(){

char inbuf[MSGSIZE];

int p[2],j;

if (pipe(p)==-1){

fatal("Ошибка вызова pipe");

exit(1);

}

write(p[1],msg1,MSGSIZE);

write(p[1],msg2,MSGSIZE);

write(p[1],msg3,MSGSIZE);

for (j=0;j<3;j++){

read(p[0],inbuf,MSGSIZE);

printf("%s\n",inbuf);

}

exit(0);

}

#include <unistd.h>

#include <sys/types.h>

#include <error.h>

#include <stdio.h>

#define MSGSIZE 16

char msg1[]="Привет Сергей";

char msg2[]="Привет Ксюша";

char msg3[]="Привет Лена";

int fatal(char* s){

perror(s);

exit(1);

}

main(){

char inbuf[MSGSIZE];

int p[2],j;

pid_t pid;

if (pipe(p)==-1){

fatal("Ошибка вызова pipe");

exit(1);

}

switch(pid=fork()){

case -1:

fatal("Ошибка вызова fork");

exit(2);

case 0:

write(p[1],msg1,MSGSIZE);

write(p[1],msg2,MSGSIZE);

write(p[1],msg3,MSGSIZE);

break;

default:

for (j=0;j<3;j++){

read(p[0],inbuf,MSGSIZE);

printf("%s\n",inbuf);

}

wait(NULL);

}

exit(0);

}

Создание процессов

#include<stdio.h>

#include<unistd.h>

#include<iostream.h>

#include<sys/types.h>

int main() {

int pid=10,i;

printf("Начало pid=%d\n",pid);

pid=fork();

for(i=0;i<3;i++){

printf("pid=%d i=%d\n",pid,i);

}

switch (pid) {

case -1: perror("fork");

break;

case 0:

printf("Дочерний процесс создан pid=%d \n", pid);

return 0;

default:

printf("Родительский процесс после вызова fork() pid=%d\n",pid);

}

printf("Конец pid=%d\n",pid);

return 0;

}

#include<stdio.h>

#include<unistd.h>

/*#include<iostream.h>*/

#include<sys/types.h>

#include<fcntl.h>

#include <stdlib.h>

#include<sys/wait.h>

int main() {

int pid=10,i=0,j;

int status;

pid_t child_pid,pd;

for(j=0;j<5;j++){

printf("до fork() pid=%d j=%d\n",pid,j);

}

fflush(stdout);

pid=fork();

if(pid==-1){

perror("fork");

exit(1);

}

for(i=0;i<3;i++){

printf("После fork() pid=%d i=%d\n",pid,i);

}

if(pid==0){

printf("Дочерний процесс создан pid=%d\n",pid);

}

else{

printf("Родительский процесс после вызова fork() pid=%d\n",pid);

}

printf("Значение pid=%d в конце \n",pid);

return 0;

}

#include<stdio.h>

#include<unistd.h>

#include<iostream.h>

#include<sys/types.h>

int main() {

printf("Начало\n");

switch (fork()) {

case (pid_t)-1: perror("fork");

break;

case (pid_t)0:

printf("Дочерний процесс создан \n");

return 0;

default:

printf("Родительский процесс после вызова fork()\n");

}

return 0;

}

#include<stdio.h>

#include<unistd.h>

#include<iostream.h>

#include<sys/types.h>

#include<fcntl.h>

#include <stdlib.h>

#include<sys/wait.h>

int main() {

int pid=10,i=0,j;

int status;

pid_t child_pid,pd;

for(j=0;j<5;j++){

printf("до fork() pid=%d j=%d\n",pd,j);

}

fflush(stdout);

pd=fork();

if(pd==-1){

perror("fork");

exit(1);

}

for(i=0;i<3;i++){

printf("После fork() pid=%d i=%d\n",pd,i);

}

if(pd==0){

printf("Дочерний процесс создан pid=%d\n",pd);

}

else{

printf("Родительский процесс после вызова fork() pid=%d\n",pd);

waitpid(child_pid,&status,WUNTRACED);

}

printf("Значение pid=%d в конце \n",pd);

if(WIFEXITED(status))

cerr << child_pid << " exist: " << WEXITSTATUS(status) << endl;

else if(WIFSTOPPED(status))

cerr << child_pid << " stoped by: " << WSTOPSIG(status) <<endl;

else if(WIFSIGNALED(status))

cerr << child_pid << " killed by: " << WTERMSIG(status) << endl;

else perror("waitpid");

_exit(0);

return 0;

}

#include<stdio.h>

#include<unistd.h>

#include<iostream.h>

#include<sys/types.h>

#include<fcntl.h>

#include <stdlib.h>

#include<sys/wait.h>

#include<errno.h>

int System(const char* cmd) {

int status;

pid_t pid;

switch (pid=fork()){

case -1:return -1;

case 0: execl("/bin/bash","bash","-c",cmd,0 );

perror("execl");

exit(errno);

}

if(waitpid(pid,&status,0)==WIFEXITED(status))

return WEXITSTATUS(status);

return -1;

}

int main() {

int rc=0;

char buf[256];

do {

printf("bash> ");fflush(stdout);

if(!gets(buf)) break;

rc=System(buf);

}while(!rc);

return(rc);

}

#include <unistd.h>

main(){

printf("запуск программы ls\n");

execl("/bin/ls","ls","-l",(char*)0);

/*если возврашает значение, то вызов неудачный*/

perror("Вызов не смог з0апустить задачу ls");

exit(1);

}

#include <unistd.h>

main(){

printf("запуск программы ls\n");

execl("/bin/ls","ls","-l",(char*)0);

/*если возврашает значение, то вызов неудачный*/

perror("Вызов не смог запустить задачу ls");

exit(1);

}

#include <unistd.h>

#include <sys/types.h>

#include <error.h>

int fatal(char* s){

perror(s);

exit(1);

}

main(){

char *const av[]={"ls","-l",(char*)0};

pid_t pid;

switch (pid=fork()){

case -1:

fatal("Ошибка вызова fork()");

break;

case 0:

execv("/bin/ls",av);

fatal("Ошибка вызова exec()");

break;

default:

wait((int*)0);

printf("программа ls завершилась\n");

exit(0);

}

}

Сигналы и процессы

#include<signal.h>

#include<stdio.h>

main(){

static struct sigaction act;

void catchint(int);

act.sa_handler=catchint;

sigfillset(&(act.sa_mask));

sigaction(SIGINT,&act,NULL);

printf("Вызов sleep номер 1\n");

sleep(3);

printf("Вызов sleep номер 2\n");

sleep(3);

printf("Вызов sleep номер 3\n");

sleep(3);

printf("Вызов sleep номер 4\n");

sleep(3);

printf("Выход\n");

exit(0);

}

void catchint(int signo){

printf("\n Сигнал CATCHINT:signo=%d\n",signo);

printf("\n Сигнал CATCHINT:Возврат\n\n");

}

#include<signal.h>

#include<stdio.h>

main(){

static struct sigaction act;

void catchint(int);

act.sa_handler=SIG_IGN;

sigfillset(&(act.sa_mask));

sigaction(SIGINT,&act,NULL);

sigaction(SIGQUIT,&act,NULL);

printf("Вызов sleep номер 1\n");

sleep(3);

printf("Вызов sleep номер 2\n");

sleep(3);

printf("Вызов sleep номер 3\n");

sleep(3);

printf("Вызов sleep номер 4\n");

sleep(3);

printf("Выход\n");

exit(0);

}

void catchint(int signo){

printf("\n Сигнал CATCHINT:signo=%d\n",signo);

printf("\n Сигнал CATCHINT:Возврат\n\n");

}

#include<signal.h>

#include<stdio.h>

main(){

sigset_t set1,set2;

/*Создать полный набор сигналов*/

sigfillset(&set1);

/*Создать полный набор сигналов не включающий sigint sigquit*/

sigfillset(&set2);

sigdelset(&set2,SIGINT);

sigdelset(&set2,SIGQUIT);

/*Некритический участок кода*/

/*установим блокировку всех сигналов*/

sigprocmask(SIG_SETMASK,&set1,NULL);

/*критический участок кода*/

/*установим блокировку двух сигналов*/

sigprocmask(SIG_UNBLOCK,&set1,NULL);

/*менее критический участок кода*/

sigprocmask(SIG_UNBLOCK,&set2,NULL);

/*Отменить блокировку сигналов*/

sigprocmask(SIG_UNBLOCK,&set1,NULL);

}

#include<signal.h>

#include<stdio.h>

#include<unistd.h>

#include<sys/types.h>

int ntimes=0;

main(){

pid_t pid,ppid;

void p_action(int),c_action(int);

static struct sigaction pact,cact;

pact.sa_handler=p_action;

sigaction(SIGUSR1,&pact,NULL);

switch(pid=fork()){

case -1:

perror("syncro");

exit(1);

case 0:

cact.sa_handler=c_action;

sigaction(SIGUSR1,&cact,NULL);

ppid=getppid();

for(;;){

sleep(1);

kill(ppid,SIGUSR1);

pause();

}

default:

for(;;){

pause();

sleep(1);

kill(pid,SIGUSR1);

}

}

}

void p_action(int sig){

printf("Родительский процесс получил сигнал#%d\n",ntimes++);

}

void c_action(int sig){

printf("Дочерний процесс получил сигнал#%d\n",ntimes++);

}



Скачать документ

Похожие документы:

  1. М. А. Шолохова Утверждаю: Ректор мггу им. М. А. Шолохова Нечаев В. Д. 20 г. Основная образовательная программа (4)

    Основная образовательная программа
    Абитуриент должен иметь высшее образование (профильное или непрофильное), успешно пройти вступительное испытание в форме тесте и эссе по психолого-педагогическому направлению.
  2. Учебно-методический комплекс по дисциплине «история россии»

    Учебно-методический комплекс
    Нормативный срок освоения основной образовательной программы подготовки бакалавра по направлению 050400.62 СОЦИАЛЬНО-ЭКОНОМИЧЕСКОЕ ОБРАЗОВАНИЕ при очной форме обучения – 4 года.
  3. Конференция посвящена проблеме интеграции российского образования в мировое образовательное пространство

    Документ
    Роль и место преподавателя в системе Россикого образования: материалы 5-й региональной научно-методической конференции, посвященной Году учителя. – В 2-х ч.
  4. М. В. Ломоносова Факультет журналистики Единый государственный экзамен белаякнига (1)

    Книга
    Книга «Единый государственный экзамен. Белая книга» составлена из материалов печати, радио и телевидения, посвященных злободневным проблемам реформы российского образования.
  5. М. В. Ломоносова Факультет журналистики Единый государственный экзамен белаякнига (2)

    Книга
    Книга «Единый государственный экзамен. Белая книга» составлена из материалов печати, радио и телевидения, посвященных злободневным проблемам реформы российского образования.

Другие похожие документы..