gpt4 book ai didi

c - Loop 无法继续循环

转载 作者:太空宇宙 更新时间:2023-11-04 02:44:38 25 4
gpt4 key购买 nike

我正在编写一些代码以在每次写入特定 FIFO 时创建一个新文件夹:

int main (int argc, char* argv[]) {
if (argc != 2) {
printf("Usage: %s <directory>\n",argv[0]);
exit(0);
}
int ret = chdir(argv[1]);
if (ret < 0) {
printf("Could not chdir to %s\n",argv[1]);
perror("");
exit(0);
}

ret = mkfifo("create",0666);
if (ret < 0) {
perror("Could not make create fifo");
return 0;
}
int ctfd = open("create",O_RDWR);
if (ctfd < 0) {
perror("Could not open create");
return 0;
}
char create[1];
//socket counter
int count = 0;
char crdir[15];

for(;;ret = read(ctfd,create,1)) {
//printf("%s %d\n",create,count);
if (ret < 0) {
perror("Failed to read from create");
continue;
}
else if (ret < 1 || create[0] == '\n') {
continue;
}

sprintf(crdir,"%d",count);
ret = mkdir(crdir,0777);
if (ret < 0) {
printf("Failed to create dir");
perror("");
continue;
}
count++;
switch(fork()) {
case -1:
perror("Failed to fork");
break;
case 0:
printf("%d\n",count);
break;
default:
//char* argv[ ] = {"netclient",cte};
exit(0);
}
printf("test");
}
//execvp()
return 0;

但是当运行时会发生这种情况:

arthur@dent:~/coding/netdir$ mkdir test
arthur@dent:~/coding/netdir$ ./netserver test &
[1] 2122
arthur@dent:~/coding/netdir$ echo 1 > test/create
[1]+ Done ./netserver test
1

我做错了什么?为什么它不继续循环并等待更多输入?FIFO是打开读写的,这样写停止的时候就不会关闭,是不是不太行?

最佳答案

再看一眼,我会说你的问题出在 switch( fork() ) 中。fork() 为子进程返回 0,为父进程返回子进程的 PID,但您在 default 中有 exit(0); : 所以你退出了父级。

另一个问题(第一次看到):你的循环是:

for(;;ret = read(ctfd,create,1)) {
do_something;
}

等于:

while( 1 ) {
do_something;
ret = read(ctfd,create,1);
}

你在阅读之前“做某事”吗?这导致未定义的行为,例如因为 create 的内容未定义。

关于c - Loop 无法继续循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28590412/

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