Linux で名前付きパイプを介してメッセージを交換する単純な C プログラムを作成しています。問題は、それを機能させるためにスーパーユーザーとして実行する必要があることです。そうしないと、「許可が拒否されました」というエラーが表示されます。ディレクトリに対する書き込み権限が付与されます。
drwxr-xr-x 2 alpa alpa 4096 26 giu 17.24 .
umask は問題ないはずです:
$ umask
0022
パイプ ファイルは実際に作成されますが、パーミッション ビットが間違っています。
$ ls -l | grep fifo.fifo
pr----x--t 1 alpa alpa 0 26 giu 17.29 fifo.fifo
そのため、読み取りまたは書き込みのためにそれを開こうとすると、open() システム コールが失敗します。
コードは次のとおりです。
...
if(mkfifo(pathname, perms) == -1 && errno != EEXIST)
return NULL;
if(chmod(pathname, perms) == -1)
return NULL;
...
fifo->fd[0]= open(fifo->pathname, O_RDONLY);
if(fifo->fd[0] == -1){
fifo_delete(&fifo);
return NULL;
...
よろしくお願いいたします。