1

尝试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);
    }
}
4

2 回答 2

4

您正在使用oflagnot a创建它mode_t

mkfifo采用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
于 2012-10-30T17:36:48.603 回答
1

如果您依靠 perror 的输出来告诉您遇到了权限错误,那么您很可能弄错了。对 printf 的调用很可能会更改 errno,因此该信息是虚假的。不要调用 printf。写吧:

perror( path );

并查看错误消息是否更改。

于 2012-10-30T16:21:06.570 回答