|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
01.05.2012, 15:42 | #1 |
Пользователь
Регистрация: 08.02.2012
Сообщений: 31
|
Программирование под Unix. Сигналы
Задача:
Процесс-отец открывает существующий текстовый файл, а затем порождает два дочерних процесса, которые по очереди выводят содержимое этого файла фиксированными порциями по 10 символов, предваряя каждый вывод номером своего процесса. Вывод на экран заканчивается или при достижении конца файла, или по истечении интервала времени в 10 секунд. вот мой код, но он не работает хоть убей: #include<signal.h> #include<stdio.h> #include<sys/types.h> #include<unistd.h> #include<stdlib.h> void p_action(int sig) { FILE *fd; char line[11]; if ((fd=fopen("1.txt","r"))==NULL) { printf("error\n"); exit(1); } while(!feof(fd)) { printf("%d\n",getpid()); if(fgets(line,11,fd)) printf("%s\n",line); } fclose(fd); } void c_action(int sig) { FILE *fd; char line[11]; if ((fd=fopen("1.txt","r"))==NULL) { printf("error\n"); exit(1); } while(!feof(fd)) { printf("%d\n",getpid()); if(fgets(line,11,fd)) printf("%s\n",line); } fclose(fd); } void handler(int s) { alarm(10); signal(SIGALRM,handler); printf("10 seconds\n"); } int main(int argc, char **argv) { static struct sigaction pact, cact; pid_t pid,pid1,pid2; FILE *fd; int c; char line[11]; pid1=fork(); pid2=fork(); for(;;) { signal(SIGALRM,handler); alarm(10); pause(); } if(pid1==0) { cact.sa_handler=c_action; sigfillset(&(cact.sa_mask)); sigaction(SIGUSR1,&cact,NULL); pid2=getpid(); for(;;) { sleep(1); kill(pid2,SIGUSR1); pause(); } }else if(pis2==0) { pid1=getpid(); pact.sa_handler=p_action; sigfillset(&(pact.sa_mask)); sigaction(SIGUSR2,&pact,NULL); for(;;) { sleep(1); kill(pid1,SIGUSR1); pause(); } } else waitpid((int*)0); waitpid((int*)0); exit(0); alarm(0); } |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
UNIX. Профессиональное программирование | mihali4 | Linux (Ubuntu, Debian, Red Hat, CentOS, Mint) | 3 | 01.07.2013 02:04 |
strcpy| программирование под Unix | Демик | Общие вопросы C/C++ | 6 | 30.03.2012 15:14 |
Язык С под Unix. | Roukert | Фриланс | 0 | 23.12.2011 16:25 |
Компиляторы под Unix | VKorablev | Софт | 2 | 17.04.2011 23:15 |