mkfifo() не создает файл в C

Я пытаюсь создать именованный канал в C, но безуспешно.

Вот мой код:

pid_t pid = getpid() ;
char * pipeNameo = malloc( sizeof(char) * 100 ) ;
len = 0 ;

//len += sprintf( pipeNameo + len, "%s", "/Users/Davidb/Desktop/") ; // tried various paths
len += sprintf( pipeNameo + len, "%ld", (long)pid) ;
len += sprintf( pipeNameo + len, "%s", "_") ;
len += sprintf( pipeNameo + len, "%d", i) ; // it is in a loop, i starts at 0 and increments
len += sprintf( pipeNameo + len, "%s", "o") ;

printf("pipeNameo : %s\n", pipeNameo ) ;
val = mkfifo(pipeNameo, 0666) ;
printf("Did named pipe succeed: %d\n", val) ;

Итак, после запуска этого я проверяю каталог, и файл не создается. Вот пример вывода:

OUTPUT, when loop runs twice
pipeNameo : /Users/Davidb/Desktop/1152_0o
Did named pipe succeed: 0
pipeNameo : /Users/Davidb/Desktop/1152_1o
Did named pipe succeed: 0

Пожалуйста помоги :)

ОБНОВЛЕНИЕ Хорошо, я вижу, что ls -l работал, когда путь был установлен на мой рабочий стол! Но это не работает, когда я пытаюсь установить его в текущий каталог (где хранится main.c). Я попытался добавить "/." и "/" перед именем канала не работали.


person David Baez    schedule 22.07.2014    source источник
comment
Это работает из командной строки?   -  person stark    schedule 22.07.2014
comment
mkfifo() вернул 0, что означает успешное выполнение.   -  person bestalign    schedule 22.07.2014


Ответы (1)


mkfifo() создаст именованный канал для межпроцессного взаимодействия с именем, которое вы указали в pipeNameo. Именованные каналы создаются на жестком диске для механизма IPC.

В командной строке введите ls -l для просмотра этого файла.

Для получения дополнительной информации mkfifo()

person Sathish    schedule 22.07.2014
comment
Но fifo должен быть виден в файловой системе (иначе другие процессы не смогли бы его открыть). - person Martin R; 22.07.2014
comment
@MartinR, но он виден нормально, как и другие файлы? - person Sathish; 22.07.2014
comment
Да, если вы вызываете ls -l, первый флаг будет отображаться как «p»: prw-r--r-- 1 leo abkdev 0 2014-07-21 19:32 fifo - person Ingo Leonhardt; 22.07.2014
comment
@IngoLeonhardt Спасибо, приятель! - person Sathish; 22.07.2014
comment
Хорошо, я вижу, что ls -l работал, когда путь был установлен на мой рабочий стол! Но это не работает, когда я пытаюсь установить его в текущий каталог (где хранится main.c). Я попытался добавить /. и / перед именем трубы не работали. - person David Baez; 23.07.2014
comment
@DavidBaez ты пробовал, не указывая путь? я имею в виду только имя! В этом случае я думаю, что это создаст канал в вашем PWD. - person Sathish; 23.07.2014