0

私のコードには 2 つの問題があります。

最初の問題は、一度 fifo を作成すると、コードに条件を追加する方法がわからないため、将来実行するときに fifo が存在する場合は作成しないことです。グーグルしようとしましたが、「アクセス」は機能しませんでした(そこに固執して続行しませんでした)。

私の 2 番目の問題は、コードが "open("MyFifo..." 行でスタックしているということです。これは、fifo を作成してから初めての場合でも (つまり、fifo を作成したばかりで、mkfifo が成功し、open( に到達したことを意味します)。 ) 行 - そこに詰まっています)。

//create new fifo
if(mkfifo("myFifo",0666)<0)
{
    perror("fifo creation failed.");
    exit(1);
}

//get fifo fd
if((fd=open("myFifo",O_RDONLY))==-1)
{
    perror("failed opening fifo.");
    exit(1);
}

私が間違っていることは何ですか?

4

1 に答える 1

1

探している関数呼び出しはstat. ファイルが存在する場合は、struct stat変更時刻などのファイル属性が入力されます。ファイルが存在しない場合、stat()は -1 を返し、errnoに設定されEACCESSます。


mkfifoマニュアルページには、

通常、読み取り用に FIFO を開くと、他のプロセスが同じ FIFO を書き込み用に開くまでブロックされます。逆の場合も同様です。

ハングをopen()止めるには、最初に FIFO に書き込む別のプロセスを開始します。他のプロセスが最初に書き込み用に FIFO を開くと、読み取りプログラムはまったくハングしませんopen()

于 2013-05-12T20:46:48.923 に答える