Листинг 4. Модификация программы sigact.c – программа sigact_1.c
Изменению подверглась процедура изменения диспозиции сигналов и обработчик пользовательского сигнала SIGUSR1. Теперь при попадании в него генерируется прерывание процесса посредством системного вызова kill (getpid(), SIGINT). После чего процесс засыпает. Рассмотрим пример вызова программы и проанализируем полученные результаты.
Запуск и анализ результатов:
$ gcc -o sig_1 sigact_1.c
$ ./sig_1&
[1] 5439526
$ kill -s SIGUSR1 5439526
SIGINT: is blocked
$ pidin -p 5439526
pid tid name prio STATE Blocked
5439526 1 ./sig_1 10r NANOSLEEP
SIGINT: is ready
$ pidin -p 5439526
pid tid name prio STATE Blocked
pidin: couldn't open /proc/5439526/as: No such file or directory
[1] + Interrupt ./sig_1
Во время сна процесс еще существовал, после его ‘отмирания’ был немедленно уничтожен пришедшим до засыпания сигналом SIGINT.
5. Неименованные каналы
#include <stdio.h>
#include <unistd.h>
int main (int argc, char* argv[]) {
if(argc < 2) {
printf("Pipe.c: not enouth input args\n");
exit(1);
};
char *FName;
FName = argv[1];
char str_f[256];
char str_p[256];
int filedes[2];
int pid,err;
if((err = pipe(filedes)) < 0) {
printf("Pipe.c: error while create pipe\n");
exit(1);
};
pid = fork();
if (!pid) {
printf("Pipe.c: son\n");
int input = fopen(FName,"r");
if (input <=0) {
printf("Pipe.c: error while open file [%s]\n",FName);
exit(1);
} else {
printf("Pipe.c: file [%s] is open\n",FName);
fscanf(input,"%s",str_f);
write(filedes[1],str_f,strlen(str_f));
printf("Pipe.c: write data [%s] to pipe\n",str_f);
close(input);
close(filedes[1]);
};
return 0;
} else {
printf("\nPipe.c: father\n");
read (filedes[0],str_p,30);
close(filedes[0]);
printf("Pipe.c: read from pipe %s\n",str_p);
};
return 0;
}
Листинг 5.1. Программа pipe.c
kekeke
l
Листинг 5.2. Файл Input.txt
WOW! go into the pipe!)))! ^^
Листинг 5.3. Файл Input.2
Пользователь указывает имя файла в качестве параметра программы. В случае ошибки ввода или же преднамеренно-неверного указания файла, произойдет ошибка. Программа работает с уже созданными файлами. Тестирование проводилось на основе двух файлов – Input.txt и Input.2 В первом случае – это три строчки, в последней из которых содержится один пробел. Во втором – одна строчка.
Рассмотрим работу программы:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.