Использование 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()
Другие вопросы по тегам