2014-09-07 7 views
-6

Какой из следующих системных вызовов может возвращать EINTR или EAGAIN/EWOULDBLOCK?Какие системные вызовы могут возвращать коды ошибок EINTR или EAGAIN?

getsockname() 
chdir() 
bind() 
fcntl() 
listen() 
setsid() 
setsockopt() 
socket() 
stat() 
unlink() 
access() 
accept() 
open() 
usleep() 
dup2() 
fork() 
waitpid() 
wait() 
read() 
write() 

Некоторые из этих системных вызовов возвращают EINTR или EAGAIN при ошибке (API-интерфейсом API).

Также существуют некоторые системные вызовы, которые API не относятся к EINTR/EAGAIN и, тем не менее, возвращают их.

Пожалуйста, помогите.

+3

Назовите меня сумасшедшим, но это почти похоже на домашнюю проблему ... –

+1

Многие системные вызовы могут возвращать эти коды ошибок. Одно место для проверки - это [спецификация POSIX 2008/2013] (http://pubs.opengroup.org/onlinepubs/9699919799/toc.htm). Вы можете поочередно выполнять каждую функцию и проверять, является ли EINTR или EAGAIN допустимым кодом ошибки. Или вы можете просмотреть страницы руководства в своей системе. Я не знаю онлайн-ресурса, который перечисляет системные вызовы и коды ошибок на одной странице - это была бы большая страница. –

+1

Я знаю, что для такой информации могут использоваться справочные страницы или спецификация Open Group, но я знаю, что многие люди обрабатывают коды ошибок EINTR/EAGAIN для некоторых системных вызовов, которые не относятся к ним ни на страницах руководства, ни в спецификации. Это может случиться, потому что некоторые системные вызовы могут использовать другие системные вызовы, которые возвращают EINTR/EAGAIN. Должен ли я обрабатывать EINTR/EAGAIN только в том случае, если ссылка на man или spec ссылается? –

ответ

0

Я нашел ответ. Этот вопрос не должен быть удален. Как правило, только системные вызовы, которые являются «медленными», возвращают EINTR. Медленные вещи - это терминальные входы/выходы и вещи, которые ждут (выберите, подождите, поспите, приостановите и т. Д.).

 Смежные вопросы

  • Нет связанных вопросов^_^