- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正面临标题所说的确切问题。
代码
pid_t childpid;
int childfdRead, childfdWrite; // file descriptors for childs
int parentfdsRead[numWorker], parentfdsWrite[numWorker]; // file descriptors for parent
// store the fifo filenames
char *childPipeNameRead[numWorker];
char *childPipeNameWrite[numWorker];
// helper string to construct fifo filenames
char *suffix = (char*)malloc(20*sizeof(char));
char *fifoname = (char*)malloc(20*sizeof(char));
for(i = 0; i < numWorker; i++){
// Fifo filename structure read
sprintf(fifoname, "%s", PATH);
sprintf(suffix, "_childRead%d", i);
childPipeNameRead[i] = strdup(strcat(fifoname, suffix));
mkfifo(childPipeNameRead[i], 0666);
// Fifo filename structure write
sprintf(fifoname, "%s", PATH);
sprintf(suffix, "_childWrite%d", i);
childPipeNameWrite[i] = strdup(strcat(fifoname, suffix));
mkfifo(childPipeNameWrite[i], 0666);
childpid = fork();
if(childpid < 0){
perror("fork\n");
}
else if(childpid == 0){
// Open read and write pipes on childs.
if((childfdRead = open(childPipeNameRead[i], O_RDONLY | O_NONBLOCK)) < 0)
perror("child pipe:");
printf("Child with id %d opened pipe with name %s\n", getpid(), childPipeNameRead[i]);
if((childfdWrite = open(childPipeNameWrite[i], O_WRONLY)) < 0)
perror("child pipe:");
printf("Child with id %d opened pipe with name %s\n", getpid(), childPipeNameWrite[i]);
break;
}
else{
// Open read and write pipes for each child in the parent process.
if((parentfdsRead[i] = open(childPipeNameRead[i], O_RDONLY | O_NONBLOCK)) < 0)
perror("parent pipe:");
printf("Parent with id %d opened pipe with name %s\n", getpid(), childPipeNameRead[i]);
if((parentfdsWrite[i] = open(childPipeNameWrite[i], O_WRONLY)) < 0)
perror("parent pipe:");
printf("Parent with id %d opened pipe with name %s\n", getpid(), childPipeNameWrite[i]);
}
}
在父进程和一个子进程打开其读取管道(父进程仅打开其中一个)后,程序将挂起。这是正常行为吗?我期望它打开所有管道,因为我正在使用 O_RDONLY | O_NONBLOCK
对于 parent 和 child 来说。
最佳答案
问题是您打开 childPipeNameRead[i]
以便在子进程和父进程中读取。同样,您打开 childPipeNameWrite[i]
以便在两个进程中进行写入。
您需要在其中一个进程中执行相反的操作。
关于c - Open() with O_WRONLY 会阻塞,即使我 open() with O_RDONLY 在另一端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50074505/
我正在处理文件状态标志。 在我进行的测试中,我发现 #include #include "fcntl.h" int main() { const int flag = O_RDONLY;
我正在根据我在某些元文件中设置的权限检查发送到 open(2) 调用的标志。这里的 perms 与通常发送给 chmod 等调用的八进制值有关。我希望在 perms 与相关标志不匹配时输入 if bl
在我的简单程序中: #include #include #include #include using namespace std; int main(int argc, char *argv
使用函数 Open() 或 OpenFile(path, os.O_RDONLY) 后我可以读取文件,但之后无法删除文件。所以我尝试使用写标志 os.RDWR 打开文件,如下面的代码,看看我是否可以删
我目前正在从以下网站学习现代 OpenGl:http://www.arcsynthesis.org/gltut/Building%20the%20Tutorials.html . 不幸的是,当我按照说
是否可以从 nodejs 访问操作系统常量 O_RDONLY、O_WRONLY、O_APPEND 等的值? 我知道它们在所有平台上都不一样,所以正确的方法是使用常量而不是依赖我当前系统中的硬编码值。
我正面临标题所说的确切问题。 代码 pid_t childpid; int childfdRead, childfdWrite; // file descriptors for childs int
我想在我的程序中读取异步磁盘。 服务器上有很多硬盘,如果一个硬盘慢,程序就会阻塞。我想进行异步调用。 如果我调用: 打开(路径,O_NONBLOCK | O_RDONLY | O_DIRECT) 然后
我正在尝试调试为什么我的 PHP 使用如此多的 CPU。 像这样运行 strace 后: strace -e open,close php /scripName.php 它向我显示了它使用的所有文件,
我是一名优秀的程序员,十分优秀!