这是我的简单代码,它打开一个命名管道,向其中写入一个字符串,然后关闭该管道。管道是在另一个函数中创建的,如下所述。
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更改了它们,但它仍然卡住了,因为“queue opened”从未被打印出来。 perror(“open”)的错误消息也不会显示。我错过了什么?