gpt4 book ai didi

c - 如何通过管道在外部程序中使用 STDIN 数据

转载 作者:行者123 更新时间:2023-11-30 15:02:30 24 4
gpt4 key购买 nike

我有这个主程序:

char data[1024]="Hello World!";
int main(int argc,char *argv[])
{
pid_t pid;
int f1[2];
pipe(f1);
if((pid=fork())==0)
{
close(f1[1]);
dup2(f1[0], STDIN_FILENO);
if((execlp("./2","./2",NULL))==-1) printf("error");
close(f1[0]);
}
else
{
close(f1[0]);
dup2(f1[1],STDOUT_FILENO);
write(f1[1], data, sizeof(data));
close(f1[1]);
wait(NULL);
}
return 0;
}

和2.c程序:

int main(int argc,char *argv[])
{
char DATA[1024];
//sprintf(DATA,"J'ai lu %s",argv[1]);
//read(0,DATA,sizeof(DATA));
int taille=strlen(DATA);
int i;
for(i=0;i<taille;i++)
{
if(DATA[i]=='c')
{
printf("found");
}
}
}

如果我想在子程序执行的程序中使用父程序在 STDOUT 中写入的数据,我是否必须从 exec 程序中的 STDIN 读取,或者是否必须将数据作为参数传递到执行?或者也许是别的什么?

最佳答案

由于您将管道复制到 STDIN_FILENO,因此您需要从子程序中的 stdin 读取以获取父程序写入管道的内容。

此外,您还需要将 close(f1[0]); 调用移至调用 execlp() 之前。如果 exec 成功,则原始程序中后面的任何内容都不会运行。

如果您想查看子程序中的输出,您应该查找 Hello World! 中的字符:

if (DATA[i] == 'o') {
printf("found\n");
}

关于c - 如何通过管道在外部程序中使用 STDIN 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41028807/

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