开发者

Using mknod on Ubuntu in c program

I am trying to make a c program where i am usi开发者_Go百科ng mknod command like

#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");
} 

And do some stuff. It works well on Red Hat system, but fails on ubuntu giving error invalid argument.


mknod is deprecated; you should not be using it. If you want to create a FIFO, use the standard mkfifo. If you want to create an ordinary file, use creat or open with O_CREAT. Yes mknod can create device nodes, and on some systems might still be the way to do it, but on a modern Linux system you rely on the kernel and/or udevd to handle this.


mknod("testfile",'b',0);

'b' is not a very sensible argument for mknod here. mknod's argument should be a bitwise OR of a permissions mask (modified by umask) and S_IFREG (for a regular file) or S_IFIFO (for a FIFO). For example:

mknod("textfile", S_IFREG | 0666, 0);


You can create named PIPI using mknode function but it also user to create dev file so you have to specify which file you want to create with user permission and dev type is zero

Syntax:

mknode (const char* fileName, mode_t mode | S_IFIFO, (dev_t) 0)        

For example:

  mknode("pipe1",0777 | S_IFIFO, (dev_t) 0)

You also use mkfifo API for create file it's PIPE specify, In that no need to specify which kind of file you want to create:

mkfifo()
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜