3

我正在尝试在我使用 mknod 命令的地方制作 ac 程序

#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 上失败,给出错误无效参数。

4

3 回答 3

3

mknod已弃用;你不应该使用它。如果要创建 FIFO,请使用标准mkfifo. 如果要创建普通文件,请使用creat或。Yes可以创建设备节点,并且在某些系统上可能仍然是这样做的方式,但在现代 Linux 系统上,您依赖内核和/或处理此问题。openO_CREATmknodudevd

于 2011-02-27T16:41:50.530 回答
2

mknod("测试文件",'b',0);

'b'对于 mknod 来说,这不是一个非常明智的论点。mknod的参数应该是权限掩码(由 umask 修改)和S_IFREG(对于常规文件)或S_IFIFO(对于 FIFO)的按位或。例如:

mknod("文本文件", S_IFREG | 0666, 0);

于 2011-02-27T16:00:20.483 回答
0

您可以使用 mknode 函数创建命名的 PIPI,但它也是用户创建 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()
于 2016-06-27T04:04:27.590 回答