C 循环无法继续循环
我正在编写一些代码,以便在每次写入特定FIFO时创建一个新文件夹:C 循环无法继续循环,c,for-loop,mkfifo,C,For Loop,Mkfifo,我正在编写一些代码,以便在每次写入特定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]);
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;
我做错了什么?为什么它不继续循环并等待更多的输入?
FIFO是为读写而打开的,因此当写入停止时它不会关闭,这是否正常工作?再看一看,我想说您的问题在
开关(fork())
中。
fork()
返回子进程的0
,返回父进程的子进程的PID,但您有退出(0)代码>在默认值中:
因此退出父级
另一个问题(首先看到):
您的循环是:
for(;;ret = read(ctfd,create,1)) {
do_something;
}
这等于:
while( 1 ) {
do_something;
ret = read(ctfd,create,1);
}
你在阅读前是否“做点什么”。这会导致未定义的行为,例如,因为create
的内容未定义。我现在已经修复了它,但它仍然存在。
while( 1 ) {
do_something;
ret = read(ctfd,create,1);
}