LINUX.ORG.RU

write()::PIPE_BUF

 ,


0

1

Дорбрый день. Я хочу наладить связь между процесами посредством fifo. Ну не могу прояснить один вопрос - когда запись будет атомарной? Т.е. читающий процес не увидит частично записанные данные. Нашёл в man 7 pipe интересный фрагмент:

PIPE_BUF
       POSIX.1-2001 says that write(2)s of less than PIPE_BUF bytes must be atomic: the output data is written to the pipe as a con-
       tiguous  sequence.  Writes of more than PIPE_BUF bytes may be nonatomic: the kernel may interleave the data with data written
       by other processes.  POSIX.1-2001 requires PIPE_BUF to be at least 512 bytes.  (On Linux, PIPE_BUF is 4096 bytes.)  The  pre-
       cise  semantics  depend on whether the file descriptor is nonblocking (O_NONBLOCK), whether there are multiple writers to the
       pipe, and on n, the number of bytes to be written:
...
Это относится только к pipe, или к fifo в том числе? Верно ли это о записи в файл (обычный)? Естественно, man write, man fifo вопрос не прояснил.

На главный вопрос ответ нашёл http://pubs.opengroup.org/onlinepubs/009695399/functions/pwrite.html

An attempt to write to a pipe or FIFO has several major characteristics:

Atomic/non-atomic: A write is atomic if the whole amount written in one operation is not interleaved with data from any other process. This is useful when there are multiple writers sending data to a single reader. Applications need to know how large a write request can be expected to be performed atomically. This maximum is called {PIPE_BUF}. This volume of IEEE Std 1003.1-2001 does not say whether write requests for more than {PIPE_BUF} bytes are atomic, but requires that writes of {PIPE_BUF} or fewer bytes shall be atomic. ...

pavlick ★★ ()

Тут обсуждали насчет записи в обычные файлы.

Sorcerer ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.