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

oflagではなくで作成していますmode_t

mkfifoは、タイプmode_tの 2 番目のパラメーターを取ります

つまり、次のようなものです0666oflagで定義されているようにフィードしようとしています。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 に答える