gpt4 book ai didi

c - pipe 和 fork 的麻烦

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

我正在制作一个搜索文件并将其结果发送到其他命令(如管道)的程序。 ls |种类当我运行程序时没有任何反应。我认为问题是 child 等待 parent 停止在 SO 缓冲区中写入以开始阅读。这是它发送到 stdout 的内容以及管道应该发送到其他命令的内容。

    troneras@troneras-VirtualBox:~/Escritorio/busca.2012$ ./busca . -n . -print
./permisos.txt
./busca2.c
./mmap.pdf
./busca3.c~
./cuadernoso4.2011b.pdf
./busca.c~
./busca.c
./busca2.c~
./busca3.c

我不明白这是什么问题。


     if(!strcmp(argv[4],"-pipe"))
{
int pipefd[2];
int pid,dummi;

if (pipe(pipefd)<0){
perror("pipe");
exit(1);
}

pid = fork();

if (pid<0){
perror("fork");
exit(1);
}
if (pid == 0){//Child process
close(pipefd[1]);//The child is only reading from the pipe
if(dup2(pipefd[0],0)!=0){perror("dup2");exit(1);}
close(pipefd[0]);

char *argumentos[argc-4];
int j;
for (j=5;j<argc;j++){
argumentos[j-5]=argv[j];
}
argumentos[j-5]= NULL;

execvp(argv[5],argumentos);
perror("execve: ");

}else{ //parent
close(pipefd[0]);
if(dup2(pipefd[1],1)!=1){perror("dup2");exit(1);}
close(pipefd[1]);

while(count--){
if(strcmp(files[count]->d_name,".") && strcmp(files[count]->d_name,"..")){
printf("%s/%s\n",argv[1],files[count]->d_name);
free(files[count]);
}

wait(&dummi);
}

}//end pipe
free(files);

最佳答案

顺便说一句,没有理由复制 argv[] 数组。而不是

   char *argumentos[argc-4];
int j;
for (j=5;j<argc;j++){
argumentos[j-5]=argv[j];
}
argumentos[j-5]= NULL;

execvp(argv[5],argumentos);

你也可以这样做

   execvp(argv[5],argv+5);

关于c - pipe 和 fork 的麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10054473/

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