jjzjj

c - 如何对位置未知的命令使用 execv?

假设我想生成一个进程并运行execv来执行类似ls的命令,那么我就是这样做的:char*constparm[]={"/usr/bin/ls","-l",NULL};if((pid=vfork())==-1)perror("forkerror");elseif(pid==0){execv("/usr/bin/ls",parm);}现在的问题是,我在这里对ls命令的位置进行了硬编码(/usr/bin/ls)。现在假设我不知道特定命令的位置并且想执行它,那么我该怎么做呢?我知道在常规shell中查找PATH变量以实现相同的目的,但如果是使用execv的C程序,我该如何实现它?

c - 执行 : how can I initialise char *argv[ ] with multiple commands instead of a single command?

execve:如何使用多个命令而不是单个命令来初始化char*argv[]?如果我想执行4条命令,可以使用下面的语句吗?char*argv[4][]={{...},{...},{...}};要使用execve执行它们,我可以使用var从1到4的循环吗? 最佳答案 您不能仅通过一个execve调用来执行多个命令。在一个循环中,您需要fork您的程序以执行多个execve调用。在manpageofexecve是这样写的:execve()doesnotreturnonsuccess,andthetext,data,bss,andstack

c - 执行 : how can I initialise char *argv[ ] with multiple commands instead of a single command?

execve:如何使用多个命令而不是单个命令来初始化char*argv[]?如果我想执行4条命令,可以使用下面的语句吗?char*argv[4][]={{...},{...},{...}};要使用execve执行它们,我可以使用var从1到4的循环吗? 最佳答案 您不能仅通过一个execve调用来执行多个命令。在一个循环中,您需要fork您的程序以执行多个execve调用。在manpageofexecve是这样写的:execve()doesnotreturnonsuccess,andthetext,data,bss,andstack

c - 在哪里可以找到 execve() 的源代码?

你能给我execve()系统调用(exec系列)的源代码吗?我正在使用Linux。 最佳答案 execve()调用sys_execve(),sys_execve()调用do_execve(),这是操作所在的位置:http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=fs/exec.c#l1376 关于c-在哪里可以找到execve()的源代码?,我们在StackOverflow上找到一个类似的问

c - 在哪里可以找到 execve() 的源代码?

你能给我execve()系统调用(exec系列)的源代码吗?我正在使用Linux。 最佳答案 execve()调用sys_execve(),sys_execve()调用do_execve(),这是操作所在的位置:http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=fs/exec.c#l1376 关于c-在哪里可以找到execve()的源代码?,我们在StackOverflow上找到一个类似的问

linux - execve如何调用动态链接器/加载器(ld-linux.so.2)

我用gcc编译链接了最基本的C程序,test.c:intmain(){}正如预期的那样,输出是一个动态链接的可执行文件:$filetesttest:ELF64-bitLSBexecutable,x86-64,version1(SYSV),dynamicallylinked(usessharedlibs),forGNU/Linux2.6.26,BuildID[sha1]=0x0f806c099f74132a158d98aebde4639ae0998971,notstripped运行strace给出以下输出:$strace-f./testexecve("./test",["./test"]

linux - execve如何调用动态链接器/加载器(ld-linux.so.2)

我用gcc编译链接了最基本的C程序,test.c:intmain(){}正如预期的那样,输出是一个动态链接的可执行文件:$filetesttest:ELF64-bitLSBexecutable,x86-64,version1(SYSV),dynamicallylinked(usessharedlibs),forGNU/Linux2.6.26,BuildID[sha1]=0x0f806c099f74132a158d98aebde4639ae0998971,notstripped运行strace给出以下输出:$strace-f./testexecve("./test",["./test"]

c - 调用 execv() 时动态分配的内存会发生什么?

我正在编写一个简单的shell作为OS类(class)作业,我需要在PATH中搜索以找到用户输入的程序,一旦找到正确的目录,我就会分配一block内存来容纳该目录名称加上程序名称,我将它作为第一个参数传递给execv()。我本来可以静态分配100个左右的字符,但限制让我感到不舒服。那么当execv()执行时,是堆被清理了还是那block内存丢失了?这可能不是很多内存,但我只是好奇。 最佳答案 当您exec()时,整个过程(a)结束,因此包括动态内存和一些fd在内的所有资源都被操作系统回收,并且(b)被替换:代码、数据、线程……重新文

c - 调用 execv() 时动态分配的内存会发生什么?

我正在编写一个简单的shell作为OS类(class)作业,我需要在PATH中搜索以找到用户输入的程序,一旦找到正确的目录,我就会分配一block内存来容纳该目录名称加上程序名称,我将它作为第一个参数传递给execv()。我本来可以静态分配100个左右的字符,但限制让我感到不舒服。那么当execv()执行时,是堆被清理了还是那block内存丢失了?这可能不是很多内存,但我只是好奇。 最佳答案 当您exec()时,整个过程(a)结束,因此包括动态内存和一些fd在内的所有资源都被操作系统回收,并且(b)被替换:代码、数据、线程……重新文

linux - 关于 fork 和 execve 系统调用

据说fork系统调用创建一个调用进程的克隆,然后(通常)子进程发出execve系统调用来改变它的图像并运行一个新的过程。为什么要分两步?顺便说一句,execve代表什么? 最佳答案 分两步的原因是灵active。在这两个步骤之间,您可以修改新执行的程序将继承的子进程的上下文。您可能想要更改的一些内容是:文件描述符用户/组ID进程组和sessionID当前目录资源限制安排优先级和亲和力文件创建掩码(umask)如果您没有拆分fork和exec,而是有一个类似spawn的系统调用,如果您希望在子进程中以不同方式设置它们,则需要为每个进程