9. Вызов select возвращает информацию о возможности записи в дескриптор, но вызов write приводит к отправке сигнала SIGPIPE. Это описано в книге [24, с. 153-155]; когда возникает ошибка чтения или записи, select возвращает информацию о том, что дескриптор доступен, а собственно ошибка возвращается уже вызовами read или write. В листинге Г.4 приведен текст соответствующей пpoгрaммы.Листинг Г.З. Возвращает ли fstat количество байтов в канале FIFO?
//pipe/test1l.c
1 #include "unpipc.h"
2 int
3 main(int argc, char **argv)
4 {
5 int fd[2],
6 char buff[7];
7 struct stat info;
8 if (argc != 2)
9 err_quit("usage: test1
10 Mkfifo(argv[1], FILE_MODE);
11 fd[0] = Open(argv[1], O_RDONLY | O_NONBLOCK);
12 fd[1] = Open(argv[1], O_WRONLY | O_NONBLOCK);
13 /* 4check sizes when FIFO is empty */
14 Fstat(fd[0], &info);
15 printf("fd[0]: st_size = %ld\n", (long) info.st_size);
16 Fstat(fd[1], &info);
17 printf("fd[1]: st_size = %ld\n", (long) info.st_size);
18 Write(fd[1], buff, sizeof(buff));
19 Fstat(fd[0], &info);
20 printf("fd[0]: st_size = %ld\n", (long) info.st_size);
21 Fstat(fd[1], &info);
22 printf("fd[1]: st_size = %ld\n", (long) info.st_size);
23 exit(0);
24 }