на главную | войти | регистрация | DMCA | контакты | справка | donate |      

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я


моя полка | жанры | рекомендуем | рейтинг книг | рейтинг авторов | впечатления | новое | форум | сборники | читалки | авторам | добавить



Листинг Г.З. Возвращает ли 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 }

9. Вызов select возвращает информацию о возможности записи в дескриптор, но вызов write приводит к отправке сигнала SIGPIPE. Это описано в книге [24, с. 153-155]; когда возникает ошибка чтения или записи, select возвращает информацию о том, что дескриптор доступен, а собственно ошибка возвращается уже вызовами read или write. В листинге Г.4 приведен текст соответствующей пpoгрaммы.


Глава 4 | UNIX: взаимодействие процессов | Листинг Г.4. Что возвращает select при закрытии другого конца канала?