Tag: exec

C – exec是否必须在multithreading进程中立即执行fork?

情况:我有一个用C编写的multithreading程序。如果其中一个线程分叉,子进程被另一个用exec()替换,父进程等待子进程退出。 问题:在fork()创建子进程之后,有几行代码可以编译要在以下exec()命令中使用的参数。 假设我假设在由fork()创建的子进程和被exec()替换之间的时间内,子进程 – 作为父进程的副本 – 将具有父进程的所有线程,因此这些正确线程会运行 – 尽管只是很短的一段时间? 如果是这样,在fork()之后立即调用exec()的正确解决方案是什么?

C – 通过管道传递管道

我正在为学校做一个项目,我不确定我试图解决它的方式是否可行。 该项目涉及制作一个程序,分离2个孩子,然后必须用其他程序替换他们的pid,并让2个孩子通过使用read()和write()通过管道进行交谈。 我的问题是使用execve并将管道传递给那个孩子。 我现在拥有的是: 家长计划 – 分叉和让孩子打电话: #include #include #include #include #include #include #define BUF_SIZE 16 /* 2 cmd line arguments 1. file already in system (to be copied) 2. file to be created (the copy) create pipe (for communication) + 2 child processes first child replace pid with reader second child with writer wait […]

如何写入执行过程的标准输入?

我正在尝试执行从stdin读取的进程。 我想用一些数据准备stdin,以便它可以成功执行。 我怎样才能做到这一点?

如何获取exec执行的程序的返回值?

我有这个c代码: if(fork()==0){ execl(“/usr/bin/fsck”, “fsck”, “/dev/c0d0p1s0”, NULL); } 它调用execl来运行fsck以检查文件系统/dev/c0d0p1s0 。 我的问题是:如何获得fsck的返回值? 我需要fsck的返回值来检查文件系统是否一致。 谢谢。

处理execvp的参数数组?

当我调用execvp ,例如execvp(echo, b) ,其中b是命令a的参数数组,稍后更改此数组是否会影响先前执行的execvp调用? 当我尝试调用execp(echo,b)时,它最终打印出来(null)而不是b中的内容。 任何人都可以指出为什么以及我必须做什么才能正确传递参数?

捕获子进程的退出状态代码

我有一个函数,它分叉一个进程,复制输入和输出缓冲区的文件描述符,然后通过一个名为cmd的字符串传入的命令运行execl : static pid_t c2b_popen4(const char* cmd, int pin[2], int pout[2], int perr[2], int flags) { pid_t ret = fork(); if (ret < 0) { fprintf(stderr, "fork() failed!\n"); return ret; } else if (ret == 0) { /* Assign file descriptors to child pipes (not shown)… */ execl("/bin/sh", "/bin/sh", "-c", cmd, NULL); fprintf(stderr, "execl() failed!\n"); […]

了解执行和设置环境变量的要求

我们在解释老师方面遇到了很多麻烦。 我们要求澄清并从他那里得到以下回复 对于execve,使用导出的变量向它发送一个环境,并创建一个内置命令来生成/ bin / bash的子shell,这样你就可以使用env查看导出的变量。 (他在谈论在这里创建我们自己的环境变量。) 是创建自己的。 您可以在shell启动时复制environ并仅添加导出的变量 这与我在Stack Overflow上的以下post有关(阅读这篇文章将帮助您理解我想要做的事情): 使用execve的新路径运行ls命令 我们对此非常困惑。 我将再一次解释我们现在要做的事情。 类似于Linux shell的工作方式,我们需要编写自己的程序,可以设置环境变量,如PATH和USER以及用户想要定义的其他任何变量。 你将如何调用它的一个例子是(在你的程序中提示): mysetenv dog spike 这将创建一个看起来像“dog = spike”的环境变量 更重要的是,我们需要能够设置自己的PATH变量并将其发送到exec命令。 这是令人困惑的部分,因为基于我们所有的问题,我们不明白我们应该做什么。

使用fork()和exec()在C中执行命令行管道

我询问了我的代码,答案是不正确的。 在这种情况下perror使用现在我想知道我如何调整和改进,以便我不再有这些错误? execvp不会返回,除非发生错误,所以如果一切正常,封闭函数将永远不会返回。 由于先前的循环,值’i’已经超过’cmd’中数组的末尾,因此’cmd [i] .argv [0]不正确。 cmd不是struct命令的数组,因此不应编入索引 cmd.argv中的第一个条目是指向最后一个条目为NULL的数组的指针。 execvp将在该(并且只有那个)数组上工作,因此所有其他指向数组的指针都将被忽略 代码中存在大量错误。 例如,第一次通过fork_pipe()’in’中的循环包含垃圾。 传递给execvp()的第二个参数需要是一个指向字符串的指针,带有一个最终的NULL指针。 缺少最后的NULL指针,还有很多问题 #include #include #include #include #include #include struct command { const char **argv; }; /* Helper function that spawns processes */ int spawn_proc (int in, int out, struct command *cmd) { pid_t pid; if ((pid = fork ()) == 0) { if […]

从execv()中获取返回值

//code for foo (run executable as ./a.out) #include #include #include #include #include int main (int argc, char **argv) { pid_t pid; pid = fork(); int i = 1; char *parms[] = {“test2”, “5”, NULL}; //test executable named test2 if(pid < 0) { fprintf(stderr, "Fork failed"); return 1; } else if(pid == 0) { printf("Child pid […]

如何从文件描述符执行程序?

当我只知道描述符时,我需要执行一个文件。 也有可能没有链接到文件,所以找不到名称不是一个选项。 所有execve(),execvp()等函数都采用文件名。 dlopen()也有一个名字。 丑陋的解决方案(如读取文件和调用某些函数指针)都可以。