Использование mknod на Ubuntu в программе c
Я пытаюсь сделать программу переменного тока, где я использую команду mknod, как
#include<stdio.h>
#include<fcntl.h>
#include<string.h>
char info[50];
main() {
int fdr;
int rc = mknod("testfile",'b',0);
if(rc<0) {
perror("Error in mnod");
}
fdr=open("testfile",O_RDONLY);
read(fdr,info,50);
printf("\n Received message=%s",info);
printf("\n");
}
И сделать кое-что Он хорошо работает в системе Red Hat, но не работает в Ubuntu, сообщая об ошибке неверный аргумент.
3 ответа
mknod
устарела; Вы не должны использовать это. Если вы хотите создать FIFO, используйте стандарт mkfifo
, Если вы хотите создать обычный файл, используйте creat
или же open
с O_CREAT
, да mknod
может создавать узлы устройства, и в некоторых системах все еще может быть способ сделать это, но в современной системе Linux вы полагаетесь на ядро и / или udevd
чтобы справиться с этим.
MKNOD ("TestFile", 'б', 0);
'b'
Это не очень разумный аргумент для mknod здесь. mknod
Аргумент должен быть побитовым ИЛИ маски разрешений (измененной umask) и S_IFREG
(для обычного файла) или S_IFIFO
(для FIFO). Например:
mknod ("текстовый файл", S_IFREG | 0666, 0);
Вы можете создать именованный PIPI, используя функцию mknode, но это также пользователь для создания файла dev, так что вы должны указать, какой файл вы хотите создать с разрешением пользователя, а тип dev равен нулю.
Синтаксис:
mknode (const char* fileName, mode_t mode | S_IFIFO, (dev_t) 0)
Например:
mknode("pipe1",0777 | S_IFIFO, (dev_t) 0)
Вы также используете mkfifo API для создания файла, который указывает PIPE. В этом нет необходимости указывать, какой тип файла вы хотите создать:
mkfifo()