Using mknod on Ubuntu in c program

asb picture asb · Feb 27, 2011 · Viewed 11.5k times · Source

I am trying to make a c program where i am using 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.

Answer

R.. GitHub STOP HELPING ICE picture R.. GitHub STOP HELPING ICE · Feb 27, 2011

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.