типа st_blksize или размер буфера какого нибудь ... вопрос возник в связи вот с этим куском Код (Text): if (ioctl(fd,FIONREAD,&i)) == -1) return (-1); в этот самый fd переодически скармливается сокет с ним всё понятно, а переодически файл ... НО ... на некоторых системах работает (я так понимаю BSD 4.11, debian старый и новый, лично не проверял. Было много в гугле на опеннете и ещё на некоторых форумах ), а под BSD 5.5 и 6.1 пришлось добавлять Код (Text): if (ioctl(fd,FIONREAD,&i)) == -1) { fstat(fd,&mystat); if (mystat.st_mode & S_IFREG == 0) return (-1); i=mystat.st_blksize; } P.S. гдето увидел что какаято фигня под SYTEM V происходит (или наоборот не происходит, но помоему бред) с FIONREAD в какойто книжки по UNIX в гугле, теперь не могу ей найти P.P.S всё это из FROX 0.17.18 файл sstr_io.c
dag Так это для того используется, чтобы отличить файл от сокета? Тогда, кроме проверки -1 желательно проверять ещё и errno на предмет EBADF. Причём должен существовать более документированный способ отличить сокет от файла.
Тут не только проверка на сокет (грубо говоря автор FROXа даже и не думал проверять socket или регулярный файл) , тут ещё в i попадает количество доступных уже данных и это используется далее в коде ... вобщем суть не в этом (более красиво былобы сделать сначала fstat, а потом ioctl ) ворпос в том что на каких-то системах работает и не патченый код (1), тоесть гдето в i попадает непонятное число (предположительно st_blksize) но гдето (точно на BSD 5.5 и 6.1 ) это не прокатывает вот и вопрос как такое возможно ????