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()
精彩评论