2015-07-16 4 views
2

Я пытаюсь создать FIFO именованный канал, используя команду MKNOD():MKNOD() не создает именованный канал

int main() { 
char* file="pipe.txt"; 
int state; 
state = mknod(file, S_IFIFO & 0777, 0); 
printf("%d",state); 
return 0; 
} 

Но файл не создается в моем текущем каталоге. Я пробовал перечислить его ls -l. Состояние возвращает -1.

я нашел подобные вопросы здесь и на других сайтах, и я попробовал решение, которое наиболее предложенное:

int main() { 
char* file="pipe.txt"; 
int state; 
unlink(file); 
state = mknod(file, S_IFIFO & 0777, 0); 
printf("%d",state); 
return 0; 
} 

Это не имеет никакого значения, хотя и ошибка остается. Я делаю что-то неправильно здесь или есть какое-то системное вмешательство, которое вызывает эту проблему?

Помощь .. Заранее спасибо

+0

Вы не можете просто 'Е (состояние)'. 'state' является' int'. Вам понадобится 'printf ("% d \ n ", state)'. – larsks

+0

о, да ... только печатная ошибка. Спасибо – aashima

ответ

1

Вы используете &, чтобы установить тип файла вместо |. Из документов:

Тип файла для траектории в AND-ed режим аргумента и приложение должно выбрать один из следующих символических констант ...

Попробуйте это:

state = mknod(file, S_IFIFO | 0777, 0); 

Поскольку это работает:

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 
#include <unistd.h> 


int main() { 
    char* file="pipe.txt"; 
    int state; 
    unlink(file); 
    state = mknod(file, S_IFIFO | 0777, 0); 
    printf("state %d\n", state); 
    return 0; 
} 

Собирать:

gcc -o fifo fifo.c 

Выполнить это:

$ strace -e trace=mknod ./fifo 
mknod("pipe.txt", S_IFIFO|0777)   = 0 
state 0 
+++ exited with 0 +++ 

Смотрите результат:

$ ls -l pipe.txt 
prwxrwxr-x. 1 lars lars 0 Jul 16 12:54 pipe.txt 
+0

Я тоже это пробовал .. :( – aashima

+0

Непонятно, почему вы изменили его на что-то, что явно неверно на основе документации. Изначение значения в режиме просто приведет к '0', что создаст обычный файл без разрешений – larsks

+0

Я обновил этот ответ с поведением, которое я вижу в своей системе. – larsks

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