2012-06-16 4 views
4

Когда я эхо в файлы в некоторых местах в Linux, то есть echo > /tmp/file, некоторые запущенные процессы отвечают. Это IPC через файловый канал?Interprocess Communication через файл

Означает ли это, что текущий процесс всегда открывает файл для чтения? Но так, как файл может быть записан, так как поток файлов заблокирован его собственным процессом?

+0

Некоторые работающие процессы отвечают - какие и как? работающий процесс всегда открывает файл - какой файл? поток файлов заблокирован - кто это говорит? –

+0

Я имею в виду запущенные процессы в целом. И если я открою файл, его можно заблокировать. Например, открытый файл не может быть изменен, поскольку некоторые другие процессы используют его. Обычные пользователи компьютеров получают это сообщение все время, если они пытаются удалить файл или изменить его. – Amumu

ответ

6

Если вы хотите использовать файл для связи с другим процессом, вы должны посмотреть на man fifo.

доложу здесь только первые строки:

NAME 
     fifo - first-in first-out special file, named pipe 

DESCRIPTION 
     A FIFO special file (a named pipe) is similar to a pipe, except that it 
     is accessed as part of the file system. It can be opened by multiple 
     processes for reading or writing. When processes are exchanging data 
     via the FIFO, the kernel passes all data internally without writing it 
     to the file system. Thus, the FIFO special file has no contents on the 
     file system; the file system entry merely serves as a reference point 
     so that processes can access the pipe using a name in the file system. 

Я думаю, что это то, что вам нужно.

Просто подумайте, как буфер. Он должен быть открыт как для чтения, так и для записи разными способами. Процесс, который читает, будет заблокирован до тех пор, пока процесс записи не напишет на нем. Когда процесс записи заканчивается для записи, закройте файл, и это зеленый индикатор процесса чтения, чтобы запустить пустой буфер. Это FIFO, поэтому первая строка будет первой прочитанной строкой. Затем процесс записи может открыть его снова, и они начнутся снова.

Вы можете создать FIFO с mkfifo. Посмотрите на man mkfifo.

+0

, что означает, что файл на самом деле не является файлом, но это просто канал (принадлежащий некоторым процессам), видимый в файловой системе? На более низком уровне это означает, что файл является лишь ссылкой на блок памяти, и когда этот блок памяти имеет некоторые данные, он будет считаться процессом, владеющим этим блоком памяти. Именованный канал просто для взаимодействия с человеком, не так ли? – Amumu

+0

Добавлено короткое объяснение. Но я не принимал участие в человеческом взаимодействии ... разве мы не говорим о программном обеспечении ??? : P – Zagorax

+0

Ну, у нас есть именованный канал, и мы можем вручную записать в файл i.e. type 'echo foo>/tmp/file', поэтому я считаю, что это включает взаимодействие с человеком. – Amumu

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