gpt4 book ai didi

c - popen 实现中的段错误

转载 作者:行者123 更新时间:2023-11-30 17:08:43 28 4
gpt4 key购买 nike

我编写了这个 C 程序来实现 popen()。我在运行代码时遇到段错误。我尝试使用 execl() 而不是 execv(),但出现相同的错误。请帮忙

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/wait.h>



#include <sys/syscall.h>
FILE *popen(const char *command,const char* mode)
{
FILE *fp;
int pipe_fd[2];
pid_t pid;
/* Assume child is writing. */
pipe(pipe_fd);

if ((pid = vfork()) == 0) { /* Child of vfork... */
if (mode[0] == 'r') {
dup2(pipe_fd[1],1);
}
else if(mode[0] == 'w')
dup2(pipe_fd[0],0);
close(pipe_fd[0]);
close(pipe_fd[1]);



execv(command,"");
_exit(127);
}
if(mode[0] == 'r'){
close(pipe_fd[1]);
fp = fdopen(pipe_fd[0],mode);
}
else if(mode[0] == 'w'){
close(pipe_fd[0]);
fp = fdopen(pipe_fd[1],mode);
}
return fp;

}

int main(){
File*fp;
fp = popen("ls",'r');
}

最佳答案

编译器应该警告您此代码 execv(command,"");,execv 不接受指向 char 的指针作为第二个参数,只需读取man execv

关于c - popen 实现中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33555601/

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