Что такое именованные каналы?

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

124
задан Gilles 'SO- stop being evil' 23 October 2012 в 20:58
поделиться

8 ответов

И в Windows и в системах POSIX, позволяют именованные каналы, чтобы межпроцессное взаимодействие произошло среди процессов, работающих на той же машине. То, что именованные каналы дают Вам, является способом отправить Ваши данные, не имея потери производительности вовлечения сетевого стека.

Точно так же, как у Вас есть сервер, слушая IP-адрес / порт для входящих запросов, сервер может также настроить именованный канал, который может прислушаться к запросам. Или в случаях, клиентский процесс (или в библиотека доступа DB) должен знать, что определенный адрес (или имя канала) отправляет запрос. Часто, наиболее часто используемое стандартное значение по умолчанию существует (во многом как порт 80 для HTTP, SQL-сервер использует порт 1433 в TCP/IP; \\.\pipe\sql\query для именованного канала).

By, настраивающий дополнительные именованные каналы, у Вас может быть несколько выполнений серверов БД, каждый с его собственными слушателями запроса.

преимущество именованных каналов состоит в том, что это обычно намного быстрее, и освобождает ресурсы сетевого стека.

- BTW, в мире Windows, у Вас могут также быть именованные каналы к удаленным машинам - но в этом случае, именованный канал транспортируется по TCP/IP, таким образом, Вы потеряете производительность. Используйте именованные каналы для локальной коммуникации машины.

141
ответ дан 24 November 2019 в 01:07
поделиться

Unix и Windows оба имеют вещи под названием "Именованные каналы", но они ведут себя по-другому. На Unix именованный канал является односторонней улицей, которая обычно имеет всего одно средство чтения и одно устройство записи - записи устройства записи и чтения читателя, Вы получаете его?

В Windows, вещь звонила, "Именованный канал" является объектом IPC больше как сокет TCP - вещи могут течь оба пути и существуют некоторые метаданные (Можно получить учетные данные вещи на другом конце и т.д.).

именованные каналы Unix появляются как специальный файл в файловой системе и могут быть получены доступ с нормальным файлом команды IO включая оболочку. Windows не делают и должны быть открыты со специальным системным вызовом (после которого они ведут себя главным образом как нормальный дескриптор win32).

Еще более сбивающий с толку, Unix имеет что-то позвонившее "Сокет Unix" или сокет AF_UNIX, который работает больше как (но не полностью как) win32 "именованный канал", будучи двунаправленным.

38
ответ дан 24 November 2019 в 01:07
поделиться

Согласно Википедия :

[...] традиционный канал "без имени", потому что он существует анонимно и сохраняется только столько, сколько процесс работает. Именованный канал является персистентным системой и существует вне жизни процесса и должен быть "несвязанным" или удален, после того как это больше не используется. Процессы обычно присоединяют к именованному каналу (обычно появляющийся как файл) для выполнения IPC (межпроцессное взаимодействие).

16
ответ дан 24 November 2019 в 01:07
поделиться

Каналы Linux
Метод "первым пришел - первым вышел" (FIFO) межпроцессный механизм связи.

Каналы Без имени
На командной строке, представленной "|" между двумя командами.

Именованные каналы
FIFO А специальный файл. После того, как созданный, можно использовать канал точно так же, как нормальный файл (открытый, близко, запишите, читайте, и т.д.).

Для создания именованного канала, названного "myPipe", из командной строки ( страница справочника ):

mkfifo myPipe  

Для создания именованного канала из c где "путь" является именем, Вы хотели бы, чтобы канал имел, и "режим" содержит полномочия, которые Вы хотите, чтобы канал имел ( страница справочника ):

#include <sys/types.h>
#include <sys/stat.h>
int mkfifo(const char *pathname, mode_t mode);
22
ответ дан 24 November 2019 в 01:07
поделиться

Сравните

echo "test" | wc

к

mkdnod apipe p
wc apipe

, туалет заблокируется, до

echo "test" > apipe

выполняется

11
ответ дан 24 November 2019 в 01:07
поделиться

Каналы являются способом передать данные потоком между приложениями. В соответствии с Linux я использую это все время для потоковой передачи вывода одного процесса в другого. Это анонимно, потому что целевое приложение понятия не имеет, куда тот входной поток прибывает из. Это не должно.

А названный канал является просто способом активного сцепления на существующий канал и уборки пылесосом его данных. Это для ситуаций, где поставщик не знает, какие клиенты будут есть данные.

6
ответ дан 24 November 2019 в 01:07
поделиться

Межпроцессное взаимодействие (главным образом) для Приложений Windows. Подобный использованию сокетов для передачи между приложениями в Unix.

MSDN

5
ответ дан 24 November 2019 в 01:07
поделиться

Именованные каналы являются системой окон для межпроцессного взаимодействия. В случае SQL-сервера, если сервер находится на той же машине как клиент, то возможно использовать именованные каналы для передавания данных, в противоположность TCP/IP.

1
ответ дан 24 November 2019 в 01:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: