c - (在 UNIX 中执行内置程序(C)

标签 c linux unix operating-system exec

 #include<stdio.h>
    #include<unistd.h>
    #include<stdlib.h>

    int main(int argc,char *argv[],char *envp[])
    {
        int pid;
        int id;
        pid=fork();
        if(pid<0)
        {
            printf("\n Error ");
            exit(1);
        }
        else if(pid==0)                         //Child process
        {
        execve("a",argv,envp);  //Problem is in here
            printf("\n Pid of child process is %d ",getpid());  //Finds the id of the child process
        exit(0);
        }
        else                                //Parent process
        {
    wait(3);
    printf("\n Pid of parent process is %d ",getpid());
            exit(1);
        }

    }

我正在尝试在 UNIX 中执行一个名为 a 的程序,但它不起作用,可能是因为我使用了错误的 exec 命令,或者程序 a 位于不同的目录中,但我不确定。当我从终端执行此命令时,它给出我获得了子进程和父进程的 id,但没有通知我有关程序 a 的信息。

最佳答案

这对我有用。我不得不将调用更改为等待:

int retStat;
wait(&retStat);

因为 wait 确实想要返回一个值,如果没有它,程序就会崩溃。您是否检查过您的程序是否在您的路径中,或者您是否在 exec 调用中包含该路径?

关于c - (在 UNIX 中执行内置程序(C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35518109/

相关文章:

linux - 如何在shell脚本函数中返回值?

linux - 如果列包含数字,则插入文本

c - 确定分配给指针的地址的大小

c - "Cannot access memory at address 0x600b0c"& "No symbol "n "in current context."如果使用 gdb 编译时存在全局变量和局部变量

c - 具有相同数据的两个 C void 指针是否是不同的内存对象?

linux - Bluez 5 未知连接标识符

linux - 应用程序菜单编辑器

使用 wasd 键更改 x 和 y 值的 C 程序

java - 使用 Java 时无法解压缩存档,但可以在终端 - Linux 中使用

C 从客户端向服务器提交命令