gpt4 book ai didi

c - 如何在C语言中正确使用execvpe()?

转载 作者:太空宇宙 更新时间:2023-11-04 01:17:46 25 4
gpt4 key购买 nike

我正在尝试使用 execvpe() 运行编译后的 C 代码C 中的函数。我的代码文件位于 /code/Solution.c .我使用命令 gcc /code/Solution.c -o /code/Solution 编译了它.我想运行编译后的代码,即 /code/Solution文件使用 execvpe() .当我手动运行它时,我使用命令 ./code/Solution < /input/1.txt &> /stdout/1.txt它工作得很好,但是当我尝试使用 execvpe() 以编程方式执行相同操作时,它卡住了(程序永远不会结束) .以下是我的代码:

#define _GNU_SOURCE
#include<unistd.h>
#include<stdio.h>

int main(){
char *args[] = {"./Solution", "<", "/input/1.txt", "&>", "/stdout/1.txt", NULL};
char *env[] = {"PATH=/code", NULL};
int x = execvpe("Solution", args, env);
printf("%d\n", x);
return 0;
}

最佳答案

重定向运算符不是传递给内核的参数。它们是 shell 语言功能。

< /input/1.txt或者更明确地说 0</input/1.txt大致意思是(根据自己的喜好报错):

int fd;
if(0>(fd=open("/input/1.txt",O_RDONLY))){ perror("open"); /*...*/ }
if(0>dup2(fd,0)){ perror("dup"); /*...*/ }
if(fd!=0) close(fd);

同时 &>/stdout/1.txt或更多 POSIXly/explicitly 1> /stdout/1.txt 2>&1意味着

// 1> /stdout/1.txt
if(0>(fd=open("/stdout/1.txt",O_WRONLY|O_TRUNC))){ perror("open"); /*...*/ }
if(0>dup2(fd,1)){ perror("dup"); /*...*/ }
if(fd!=1) close(fd);

// 2>&1
if(0>dup2(1,2)){ perror("dup"); /*...*/ }

关于c - 如何在C语言中正确使用execvpe()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53307488/

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