2012-05-11 4 views
1

Есть ли ссылочный документ где-нибудь, описывающий поведение блокировки системных вызовов POSIX?Какие системные вызовы POSIX могут блокировать процесс?

До сих пор моя эвристика должна была помечать как потенциально блокирующую любую функцию, которая может потерпеть неудачу с EINTR? Это необходимое и достаточное условие?

+0

У меня нет списка, но я подозреваю, что это не является необходимым условием. Например, 'unlink (2)' не указывает 'EINTR' как возможную ошибку, но может блокироваться (на диске). Есть, вероятно, и многие другие. – Celada

ответ

0

Откровенно говоря, насколько я знаю, просто просмотрите страницы man и используйте здравый смысл. Даже если в вызове не указывается EINTR, подумайте о том, что он делает. Возможно, я ошибаюсь, но мне кажется, что каждый вызов в библиотеке POSIX по умолчанию блокируется и будет выполняться только в неблокирующем режиме, если вы спросите об этом (через различные флаги), но я не видел ни одного разговора, который разблокируется по умолчанию (что сделало бы что-нибудь , но разблокировать).

+0

В качестве примера встречного утверждения о том, что «каждый вызов в библиотеке POSIX блокируется по умолчанию», системный вызов 'getpid()' не блокируется; период. –

+1

'man' страницы не дают достаточной информации, и я не верю своему здравому смыслу. Примерами являются 'socket (2)', 'shutdown (2)', 'fnctl (2)' с командой F_SETFL и т. Д. Вот почему я хотел бы иметь исчерпывающий документ, который мне это говорит. –

+1

@JonathanLeffler: Но он не является асинхронным. Он возвращает значение, которое возвращает его задание, а это означает, что он не является блокирующим. Это не похоже на то, что вы вызываете 'getpid()', а затем выполняете другой код, а затем получаете результат позже. – Linuxios

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