Использование mknod на Ubuntu в программе c - PullRequest
3 голосов
/ 27 февраля 2011

Я пытаюсь создать программу переменного тока, в которой я использую команду 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 ]

4 голосов
/ 27 февраля 2011

mknod устарела;Вы не должны использовать это.Если вы хотите создать FIFO, используйте стандарт mkfifo.Если вы хотите создать обычный файл, используйте creat или open с O_CREAT.Да, mknod может создавать узлы устройства, и в некоторых системах все еще может быть способ сделать это, но в современной системе Linux вы используете ядро ​​и / или udevd, чтобы справиться с этим.

2 голосов
/ 27 февраля 2011

MKNOD ( "TestFile", 'б', 0);

'b' не очень разумный аргумент для mknod здесь. Аргумент mknod должен быть побитовым ИЛИ маски разрешений (измененной umask) и S_IFREG (для обычного файла) или S_IFIFO (для FIFO). Например:

mknod ("текстовый файл", S_IFREG | 0666, 0);

0 голосов
/ 27 июня 2016

Вы можете создать именованный 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()
...