Прошу прощения за дикий офтопик, но сильно надо, а в книжках и мане вопрос совершенно не освещен и других _дружественных_ мест я не знаю...
вобщем писал модуль к ucd-snmnpd и обнаружил эфект: Надо прочитать из FIFO (устройства) ASCIIz строку. Поступаю просто (http://oniltz.da.ru/~opa/test.c) $mkfifo file .. fd=open(file,O_RDONLY); FD_SET(fd,&set); if(select(,&set,0,0,0)>0) if(FD_ISSET(fd,&set)) read(fd,buf+ofs,1); if(buf[ofs]=='\n')printf("we got a line"); ... ладно... так все делают, но не охото на чтение _КАЖДОГО_БАЙТА_ (напоминаю: строка ASCIIz) ходить до селекта (кто видел основной цикл ucd-snmpd согласится) тут возникает вопрос: а сколько байтов есть в буфере? fstat.st_size==0 ладно пишу fd=open(file,O_RDONLY|O_NONBLOCK); ... for(;;){ n=read(fd,buf+ofs,1); if(n<=0)return; if(buf[ofs]=='\n')printf("we got a line"); ofs++; } и тут случается чудо: после получения первого байта у select начинается недержание: непрерывно срывается с моим fd, но read, разумеется, честно возвращает 0. Вопрос: как бороться с этой тварью, или 1. как узнать кол-во данных/места в буфере для чтения/записи 2. как ее успокоить 3. что почитать на эту тему и окрестности кроме текстов ядра если сильно не хочется за каждым байтом ходить к селекту и еще сильнее не хочится переходить на бинарный формат с фиксированным размером блока. подпорки типа семафоров/msgq/сигналов еще больше не нравятся (это близко к вопросу о M$vsUNIX) 4. вообще какая книжка по программированию Unix хорошая? хоть какая отмазка: все это программируется под потатой и для работы на потате

