On Tue, Apr 06, 2004 at 10:08:23AM +0300, Andrey Blochintsev wrote:
exec_pointer = fgets(exec_buf,255,pinput); if (exec_pointer == NULL) { radlog(L_ERR,"POPEN: fgets() returns NULL: errno = %s\n",strerror(errno)); pclose(pinput); return (NULL);
Что он делает, я думаю, всем понятно. Но тут возникает ситуация, когда fgets возвращает таки NULL и strerror(errno) отдает "Interrupted system call". Это у меня внешний скрипт в кору падает или я что-то не так делаю?
Зависит от остальных частей кода. Например прилетевший ALARM, влолне повод для "Interrupted system call", и попытку чтения из pipe/socket-а имеет смысл повторить (правда, вопрос еще в том что будет с буфером у fgets-а, если оно уже часть строки достало себе в буфер - а потом случился EINTR... но эту проблему можно обойти если fgets-ом не пользоваться ;)
Чем же можно заменить в данном случае fgets()? Написать чего-нибудь самому на низком уровне? Или через fgetc()? В мане ясно сказано, что смешивать read() && fgetX() не стоит. -- Alex Radetsky AR2657-RIPE RAD-UANIC =================================================================== uanog mailing list. To Unsubscribe: send mail to majordomo@uanog.kiev.ua with "unsubscribe uanog" in the body of the message