gpt4 book ai didi

c - mkfifo 的段错误

转载 作者:太空宇宙 更新时间:2023-11-03 23:40:25 25 4
gpt4 key购买 nike

我遇到了以下代码的问题:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>


int main(int argc, char*argv[]){

FILE * tube;
char chaine[10];
mkfifo("glue", 0666);
tube = fopen("glue", "r");


while(1){
fgets(chaine, 10, tube);
printf("%s\n", chaine);

}

}

这是一个模仿服务器行为的程序,但是当我在我的 Ubuntu 机器(Windows 10 Ubuntu 子系统或普通操作系统)上运行它时,mkfifo 行返回此错误:

Segmentation Fault(core dumped)

请帮忙!

编辑:

忘记发送带mkfifo测试的版本:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>


int main(int argc, char*argv[]){

FILE * tube;
char chaine[10];
int errValue = mkfifo("glue", 0666);
perror("mkfifo");
if( errValue < 0){
printf("Error: %d\n", errValue);
exit(EXIT_FAILURE);
}
tube = fopen("glue", "r");


while(1){
fgets(chaine, 10, tube);
printf("%s\n", chaine);

}

}

程序的输出是:

mkfifo: Operation not permitted
Error: -1

而 umask 之一是:

0000

非常感谢大家参与这篇文章!!:)

编辑,感谢 achal 和大家解决了问题,非常感谢:

- 一个问题,核心问题,是使用 0022 umask 而不是 0002,感谢 achal 提供此解决方案。

-第二个问题是我使用 Windows 的 Ubuntu 子系统并尝试从 CLI 运行该程序,而它位于 Windows 桌面上,Windows 显然没有为桌面提供管道权限。

-解决方案是切换到我的 Ubuntu 引导并更改 umask 然后它完美地工作:)

感谢 achal 和所有参与这篇文章的人。

问题已解决。

最佳答案

mkfifo() 是一种 IPC 机制,可用于创建用于通信相同或不同进程的 FIFO

mkfifo() 的手册页说“mkfifo() 系统调用创建了一个名为 path 的新 fifo 文件。访问权限由 mode 指定受调用进程的 umask(2) 限制

正如您在终端的评论中提到的,umask 值是 0000 意味着没有权限,这就是 mkfifo() 失败的原因,因此请根据您的要求使用 CLI 修改 umask 值。

xyz@xyz-PC:~$ umask 0002
xyz@xyz-PC:~/s_flow$ umask
0002

并将您的代码修改为

int main(int argc, char*argv[]){

FILE * tube;
char chaine[10];
int errValue = mkfifo("glue", 0666);
perror("mkfifo");
if( errValue < 0){
printf("Error: %d\n", errValue);
exit(EXIT_FAILURE);
}
tube = fopen("glue", "r");
if(tube == NULL)
{
printf("error in opening file :\n");
return 0;
}
while(1){
fgets(chaine, 10, tube);
printf("%s\n", chaine);

}

}

设置 umask 值后,执行您的程序。

希望对你有帮助

关于c - mkfifo 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47336421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com