Проблема с открытием именованной трубы - PullRequest
1 голос
/ 17 апреля 2011

Я столкнулся с проблемой при попытке отправить данные по каналам, если быть более точным: я не получаю ненулевые файловые дескрипторы для канала. Вот код для создания трубы:

//PIPE is defined as a "/tmp/my.fifo"
umask(0);
...
mknod(PIPE,S_IFIFO,0);
...
p=fopen(PIPE,"w");
if (p)
{
    //fprintf(p,"some message");
    fclose(p);
}
else
    printf("Could not open the pipe\n");

Вот код для чтения с канала:

cos_pipe = fopen(PIPE,"r");
if (cos_pipe)
{
    fgets(buffer,80,cos_pipe);
    ...
    fclose(cos_pipe);
}
else
{
    printf("Couldn't open the pipe\n");
    usleep(300000);
}

Код скомпилирован в два разных пакета, которые я запускаю отдельно. Все, что я получаю, это "Не удалось открыть трубу".

В некотором родственном примечании: должна ли программа, которая создала канал, удалить его позже?

1 Ответ

3 голосов
/ 17 апреля 2011

Аргумент mode также требует разрешения.Используйте S_IFIFO|S_IRUSR|S_IWUSR.

Попробуйте вместо этого использовать функцию mkfifo:

mkfifo(PIPE,S_IRUSR|S_IWUSR)

Вы должны удалить трубу, когда закончите с ней.Кроме того, что произойдет, если одновременно запущено более одного экземпляра вашей программы - вы используете фиксированное имя для канала.

...