我刚刚开始学习 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(存储在字符c中的数字).txt”
。
最佳答案
execl
执行单个命令,并且不了解诸如管道之类的 shell 概念。如果要执行shell命令,则必须执行shell,如下所示:
execl("/bin/sh","/bin/sh","-c","ls -l | cut -c28", (char*) 0);
关于c - 读取由 exec() 用 C 创建的子管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12533443/