我正在编写自己的unix终端,我遇到了执行命令的问题:
首先,我将用户输入并将其存储到缓冲区中,然后将单词分开并将它们存储到我的argv []数组中.即命令是"firefox"来启动存储在argv [0]中的firefox
如何启动命令?这就是我想要做的,但我遇到了错误:
void launchProcess(char *command[], char *file){
pid_t pid;
pid = fork();
if (pid == -1) {
perror("Error when forking");
exit(EXIT_FAILURE);
}
if (pid == 0){
fprintf(stderr, "Child pid = %d\n", getpid());
execv(file, command);
}
Run Code Online (Sandbox Code Playgroud)
我打电话的时候:
launchProcess(commandArgv, "STANDARD");
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:错误:launchProcess的冲突类型
如果您遇到冲突的类型错误,则应确保列出的函数与其声明的类型相同.
此外,您可能已经知道,但execv需要一个完全限定的可执行文件路径,因此像"STANDARD"这样的值不起作用; 使用execvp如果你想使用PATH变量来确定的二进制文件的位置.您还应该确保argv数组中的最后一个值NULL.最后,确保检查返回值execv; 它有可能失败,例如,如果用户试图执行不存在的程序.