LINUX.ORG.RU

История изменений

Исправление firkax, (текущая версия) :

Я хочу в идеале понять как это работает, но статьи про это какие-то поверхностные

Потому что там нечего объяснять, всё тривиально.

все методы ipc брать

ipc это общее слово, оно самоценного смысла не имеет.

А если только про pipe-ы, то до сих пор мне не понятно, как там это синхронизация работает, что за ограничение на размер pipe-а, а если прочитать из pipe-а размер уменьшить и снова писать можно будет

pipe это такой скользящий буфер, в который можно дописывать байты в конец с помощью сисколла write(), и забирать байты из начала с помощью сисколла read(). Если read() вызван а байтов нет - он ждёт, пока их кто-то запишет. Если вызван write() а места нет - то он ждёт пока кто-то сделает read() чтоб освободить место. Какой конкретно размер у этого буфера обычно не уточняют, полагаться на какие-то конкретные числа нельзя, вплоть до того что где-то он может оказаться 0-байтовым (то есть write должен сразу отдать данные вызванному кем-то ещё read-у, иначе ждёт).

Узнать, есть ли в пайпе байты и есть ли место можно с помощью сисколлов select(), poll() и epoll(linux)/kqueue(bsd), первый самый совместимый (есть во всех юниксах за последние 40 лет), второй самый простой, последнее самое эффективное то лучше не забивай им себе пока голову.

Анонимные от именованных чем-то отличаються?

Очевидно, тем что у анонимных нет имени, а у именованных есть. Зная имя, если оно есть, к нему может подключиться другая прога.

Исходная версия firkax, :

Я хочу в идеале понять как это работает, но статьи про это какие-то поверхностные

Потому что там нечего объяснять, всё тривиально.

все методы ipc брать

ipc это общее слово, оно самоценного смысла не имеет.

А если только про pipe-ы, то до сих пор мне не понятно, как там это синхронизация работает, что за ограничение на размер pipe-а, а если прочитать из pipe-а размер уменьшить и снова писать можно будет

pipe это такой скользящий буфер, в который можно дописывать байты в конец с помощью сисколла write(), и забирать байты из начала с помощью сисколла read(). Если read() вызван а байтов нет - он ждёт, пока их кто-то запишет. Если вызван write() а места нет - то он ждёт пока кто-то сделает read() чтоб освободить место. Какой конкретно размер у этого буфера обычно не уточняют, полагаться на какие-то конкретные числа нельзя, вплоть до того что где-то он может оказаться 0-байтовым (то есть write должен сразу отдать данные вызванному кем-то ещё read-у, иначе ждёт).

Анонимные от именованных чем-то отличаються?

Очевидно, тем что у анонимных нет имени, а у именованных есть. Зная имя, если оно есть, к нему может подключиться другая прога.