gpt4 book ai didi

c - 使用 C 读取由 exec() 创建的子管道

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

我刚刚开始学习 C 编程,我对 fork()exec()pipe() 有一些不确定等

我已经开发了这段代码,但是当我执行它时,变量 c 仍然是空的,所以我不知道是 child 没有写管道,还是父没有'从中读取。

你能帮帮我吗?这是代码:

int main() {
int pid=0;
int pipefd[2];
char* c=(char *)malloc(sizeof(char));
FILE *fp;

pipe(pipefd);

pid=fork();

if (pid==0){
close(pipefd[0]);
dup2(pipefd[1],1);
close(pipefd[1]);
execl("ls -l | cut -c28","ls -l | cut -c28", (char *) 0);
}
else{

close(pipefd[1]);
read(pipefd[0], c, 1);
char* path="/home/random";
char* txt=".txt";
char* root=malloc(strlen(path) + strlen(txt) + sizeof(char));
strcpy(root,path);
strcat(root,c);
strcat(root,txt);
close(pipefd[0]);

fp=fopen(root,"w+");
(...)
}

问题是最终的根字符串只有 "/home/random.txt" 因为 char c 中没有任何内容,而我想要的是打开文件 "/home/random(number stored in char c).txt"

最佳答案

execl 执行单个命令,并且不知道管道等 shell 概念。如果你想执行一个shell命令,你将不得不执行一个shell,如下:

execl("/bin/sh","/bin/sh","-c","ls -l | cut -c28", (char*) 0);

关于c - 使用 C 读取由 exec() 创建的子管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12533443/

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