これは、名前付きパイプを開き、文字列を書き込み、パイプを閉じる単純なコードです。以下で説明するように、パイプは別の関数で作成されます。
char * ipcnm = "./jobqueue";
std::cout << "opening job queue" << std::endl;
//ensure the jobqueue is opened
if ((jobq = open(ipcnm, O_WRONLY)) < 0) {
perror("open");
exit(-1);
}
std::cout << "queue opened" << std::endl;
// record the number of bytes written to the queue
size_t written = write(jobq, ptr, size*nmemb);
// close fifo
if (close(jobq) < 0) {
perror("close");
exit(-1);
}
// need to report to other agents the size of the job that was written
jobSizes.push_back(written);
しかし、open() の呼び出しがハングします。呼び出し時に fifo "jobqueue" を使用するプロセスが他にないことと、キューが作成された後のキューのファイル権限が prwxrwxr-x に設定されていることを確認しました (mkfifo(ipcnm, 0777)
パイプの作成に使用しているだけです。
o
最初は、そのグループにこのパイプのアクセス許可がないことが問題だと思ったw
ので、chmod を使用して手動で変更しましたが、「キューが開いています」が出力されないため、ハングします。perror("open"); のエラー メッセージも表示されません。
私は何が欠けていますか?