我在当前目录中尝试mkfifo()
时遇到权限错误。我绝对有权在这里创建文件。知道问题可能是什么?
char dir[FILENAME_MAX];
getcwd(dir, sizeof(dir));
for(i = 0; i<num_nodes; i++)
{
char path[FILENAME_MAX];
sprintf(path, "%s/%d",dir, i);
printf("%s\n", path);
fifoArray[i] = mkfifo(path, O_WRONLY);
if(fifoArray[i] < 0)
{
printf("Couldn't create fifo\n");
perror(NULL);
}
}
答案 0 :(得分:4)
您是使用oflag
而不是mode_t
创建的。
换句话说:0666
。您尝试按oflag
中的定义提供fcntl.h
,这通常是:
#define O_RDONLY 00
#define O_WRONLY 01
#define O_RDWR 02
因此,Invalid argument
。这是打开fifo的方法:
char * myfifo = "/tmp/myfifo";
mkfifo(myfifo, 0666);
if((fd = open(myfifo, O_RDONLY | O_NONBLOCK)) < 0){
printf("Couldn't open the FIFO for reading!\n");
return 0;
}
else {
//do stuff with the fifo
答案 1 :(得分:1)
如果您依靠perror的输出告诉您正在获得权限错误,那么您可能会误会。对printf的调用很可能会改变errno,因此信息是虚假的。不要打电话给printf。只需写下:
perror( path );
并查看错误消息是否更改。