* NIX read () / write (): они возвращаются? - PullRequest
0 голосов
/ 19 сентября 2018

Что произойдет, если прерывание / поток прервется в середине выполнения функций read(fd,buff,size) или write(fd,buff,size), а затем вернется туда, где оно было в read()/write()?Можем ли мы предположить, что он продолжит чтение или запись в дескриптор файла без потери данных и порядка?

Предположим, что нет общих переменных, которые беспокоятся о синхронизации.

1 Ответ

0 голосов
/ 19 сентября 2018

read и write являются системными вызовами, поэтому с точки зрения пользовательского пространства они являются «атомарными» - прерывание или поток не могут вытеснить их «в середине» выполнения,Любой сигнал будет доставлен после завершения системного вызова - если это прерывающий сигнал, он может вызвать «короткое» чтение или запись (меньше считанных или записанных байтов, чем ожидалось) или значение ошибки EINTR, в этом случае пользователь-уровневая программа (когда она возобновляется после прерывания и системного вызова) должна будет справиться с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...