首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏C++开发

    【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数

    示例: ​ ​ 3.execlp和execvp 函数原型: int execlp(const char* file,const char* arg,...); int execlp(const char bin/ls",argvs); // int a=execlp("ls","ls","-l","-a","--color",nullptr); int a=execvp

    44110编辑于 2024-12-09
  • 来自专栏cloudskyme

    g++: error trying to exec cc1plus: execvp: 没有那个文件或目录

    这个错误是gcc和g++版本不兼容导致的,也有可能是安装完gcc没有安装g++ 首先安装gcc和g++及一些依赖包 sudo apt-get install build-essential sudo apt-get install g++ 安装完成后使用 gcc -v 查看版本,然后使用g++ -v 查看版本,保证版本一致 如果系统中安装有多个版本的gcc 那么就需要ln一下,我的机器上边安装的是4.3的,所以执行命令如下 sudo ln -sf g++-4.3 /usr/bin/g++ sudo ln

    4.6K70发布于 2018-03-20
  • 来自专栏Michael阿明学习之路

    安装 paddleocr 报错 gcc: error trying to exec ‘cc1‘: execvp: 没有那个文件或目录

    levenshtein.c -o build/temp.linux-x86_64-3.8/Levenshtein/_levenshtein.o gcc: error trying to exec 'cc1': execvp

    1.9K30编辑于 2022-01-07
  • 来自专栏F_Alex

    安装Redis 编译make gcc: error trying to exec cc1: execvp: 没有该文件或目录的错误

    Linux(Redhat) make: gcc: error trying to exec 'cc1': execvp: 没有该文件或目录的错误 排查错误: 1、检查gcc、gcc-c++是否安装rpm

    8K30发布于 2018-06-27
  • 来自专栏零域Blog

    Unix-Linux编程实践教程-chapter08-sh

    内核将新程序载入到当前进程,替代当前进程的代码和数据,因此最好 还是fork一个子进程,然后子进程来调用execvp 如何建立新进程: fork 系统调用fork正是解决shell只能运行一条命令这个问题所需要的 父进程等待子进程结束: 进程调用wait等待子进程结束 pid = wait(&status); wait暂停调用它的进程直到子进程结束 最终子进程会结束任务并调用 exit(n) 键盘信号发给所有连接的进程 execvp 来 调用内核服务 code /* * prompting shell version 2 * Solves the 'one-shot' problem of version 1 * Uses execvp = 0; } } } return 0; } int execute(char *arglist[]) /* * use fork and execvp case -1: perror("fork failed"); exit(1); case 0: execvp

    1.4K20编辑于 2022-03-02
  • 来自专栏F_Alex

    安装Redis 编译make gcc: error trying to exec cc1: execvp: 没有该文件或目录的错误

    Linux(Redhat) make: gcc: error trying to exec 'cc1': execvp: 没有该文件或目录的错误 排查错误: 1、检查gcc、gcc-c++是否安装rpm

    2.6K20发布于 2018-06-27
  • 来自专栏CSDN搜“看,未来”

    exec族

    path,char *const argv,···· ,char *const envp[]); int execv(const char *path,char *const argv[]); int execvp , NULL ) < 0 ) { perror( "execlp error " ); exit(1); } } /** *创建子里程并调用execvp *p 是一个以NULL结尾的字符串数组指针,函数可以DOS的PATH变量查找子程序文件 */ if( fork() == 0 ) { printf("4------------execvp ------------\n"); if( execvp( "ls", arg ) < 0 ) { perror( "execvp error " ); exit

    1.5K10发布于 2020-08-26
  • 来自专栏C/C++葵花宝典

    【C++探索学习】第十九弹——进程替换:深入解析操作系统中的进程替换机制

    execvp():根据$PATH环境变量查找程序路径并执行。 execlp():与execvp()类似,但以参数列表的形式提供命令行参数。 2.2 execvp() 函数 execvp()是execve()的一个更高层的封装。它根据环境变量$PATH来查找可执行文件并执行。这意味着你只需要指定可执行文件的名称,而无需提供完整的路径。 , "-l", NULL}; // 命令行参数 printf("Before execvp\n"); // 使用 $PATH 查找可执行文件并执行 execvp("ls", \n"); return 0; } 在这个示例中,execvp()会根据$PATH查找ls命令并执行。如果execvp()调用成功,后续的printf语句将不会执行。 execvp 根据$PATH查找可执行文件并执行,传递参数。 execlp 与execvp类似,但以参数列表的形式传递命令行参数。

    36610编辑于 2024-12-07
  • 来自专栏AIoT技术交流、分享

    嵌入式Linux:子进程执行新程序

    execlp() 和 execvp() 可以根据 PATH 环境变量搜索程序。 execle() 和 execvpe() 提供自定义环境变量的支持。 () execvp() 和 execv() 类似,但它会根据 PATH 环境变量查找可执行文件。 execvp() 不要求完整路径,会自动在 PATH 中查找 ls。 execvp("ls", argv); // 根据 PATH 搜索并执行程序 perror("execvp error"); return 0; } 7、execvpe() execvpe() 是 execvp() 的扩展,允许传递自定义的环境变量。

    57510编辑于 2024-12-05
  • 来自专栏txp玩Linux

    Linux系统下进程编程之exec族函数解析(四)

    二、exec族函数的介绍和实战: 1、还是老套路,首先我们用man 3 exec来查看有哪些exec族函数: NAME execl, execlp, execle, execv, execvp, (char *) NULL, char * const envp[] */); int execv(const char *path, char *const argv[]); int execvp The execv(), execvp(), and execvpe() functions provide an array of pointers to null-terminated Special semantics for execlp() and execvp() The execlp(), execvp(), and execvpe() functions duplicate : int execlp(const char *file, const char *arg, .../* (char *) NULL */); int execvp(const

    1.7K30编辑于 2022-03-18
  • 来自专栏地鼠窝里有个Gopher

    Linux执行当前目录下的命令要使用./

    因为shell使用了fork() + execvp/execlp函数来启动新程序,这时如果没有使用绝对路径(‘/‘开头)或者使用’. int execvp(const char *filename, char *const argv[]); 那么,问题来了。root用户的PATH通常是不包含‘.’的,也就是说不包含当前目录。

    2.3K20编辑于 2022-10-30
  • 迷你版Shell:源码详解与行为解析

    内建命令(cd、echo、export) 环境变量初始化(Initenv) 重定向解析(RedirCheck 与 TrimSpace) 外部命令执行(Excute:fork、dup2、execvp execvp(g_argv[0], g_argv):用 PATH 搜索并执行命令;若成功,当前进程映像被替换,不再返回到这段代码;若失败,execvp 返回并子进程执行 exit(1). 若 execvp 找不到命令,子进程 exit(1)(或更复杂的失败场景),父进程的 lastcode 反映这个退出码。 10. 否则调用 Excute():fork 出子进程,子进程处理重定向并 execvp 外部命令,父进程等待子结束并记录退出码到 lastcode。 命令分离:你的解析流程先做重定向分离、再 token 化;命令参数保存在 g_argv,以便外部命令 execvp 使用。

    15410编辑于 2025-12-21
  • 来自专栏glm的全栈学习之路

    UNIX高级环境编程 第三次实验 实现带参数的简单Shell

    int execvp(const char *file, char *const argv[]); 5.execle int execle(const char *path, const char 则不需要,它们两者的区别是execvp函数参数是一个argv参数表,而execlp是一项一项给出参数,这些函数族最终都是调用execve系统调用。 (errno)); else if(pid==0) // child { redirect_stdin(rfile); redirect_stdout(wfile); execvp(argv 填入可执行文件参数,子进程开始执行,若出错才会执行下面的execvp error打印错误语句,waitpid等 待特定fork后子进程号结束,若出错则同样做出错打印信息处理 2.6 cd命令 对于一个自制 (argv[0], argv); printf("execvp error: %s\n", strerror(errno)); exit(

    1.2K20发布于 2020-11-26
  • 来自专栏用户10155340的专栏

    Linux进程控制【进程程序替换】

    d\n", WEXITSTATUS(status)); return 0; } 使用 execlp 替换程序更加方便,只要待替换程序路径位于 PATH 中,就不会替换失败 2.4、函数4 execvp execv 加个 p 也能实现自动查询替换,即 execvp #include <unistd.h> int execvp(const char* file, char* const argv[]) getppid()); char* const argv[] = { "ls", "-a", "-l", NULL }; execvp ,因为不论什么语言最终都需要调用系统级接口,比如文件流操作中的 open、close、write 等函数,无论什么语言的文件流操作函数都需要调用它们 ---- 2.7、函数7 execvpe 对 execvp 的再一层封装,使用方法与 execvp 一致,不过最后一个参数可以传递环境变量表 #include <unistd.h> int execvpe(const char* file, char* const

    61320编辑于 2023-07-01
  • 来自专栏南桥谈编程

    进程控制第二弹(进程程序替换)

    exit(1); } execlp、execvp execlp(const char *file, const char *arg, ...); execvp(const char *file, char *const argv[]); p(path // execl("/usr/bin/ls","ls","-l","-a",NULL); // execv("/usr/bin/ls",argv); execvp // execl("/usr/bin/ls","ls","-l","-a",NULL); // execv("/usr/bin/ls",argv); // execvp // execl("/usr/bin/ls","ls","-l","-a",NULL); // execv("/usr/bin/ls",argv); // execvp

    44310编辑于 2024-04-22
  • 来自专栏用户1337634的专栏

    configure: error: C compiler cc is not found

    not found 但是gcc和cc命令都已经安装/usr/bin/gcc和、/usr/bin/cc 编译安装redis make gcc: error trying to exec 'cc1': execvp gcc-c++ 参考 configure: error: C compiler cc is not found 安装Redis 编译make gcc: error trying to exec 'cc1': execvp

    4.8K20编辑于 2022-08-23
  • 【嵌入式Linux应用开发基础】exec()函数族

    fork 与 execvp 结合执行新程序 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/wait.h ("date", argv) == -1) { perror("execvp"); exit(EXIT_FAILURE); } } \n"); } return 0; } 父进程调用 fork 创建子进程,子进程使用 execvp 执行 date 命令,父进程则等待子进程结束并输出提示信息。 2.4. ("ls", argv) == -1) { perror("execvp"); } 查阅程序文档:了解新程序对参数的要求,保证传递正确的参数。 环境变量继承问题:使用 execl()、execlp()、execv()、execvp() 时,继承的环境变量不符合新程序要求。

    8010编辑于 2026-01-21
  • 来自专栏七月的夏天的博客

    昨天遇到collectd exec插件的bug,顺便发现他们不按套路出牌啊

    带有bug的版本: 先setenv()设置主进程自己的环境变量,然后尝试fork(),如果成功,在子进程里execvp();主进程重新unsetenv()恢复主进程自己的环境变量。 在子进程里准备环境变量数组,尝试execvpe()带签署环境变量数组作为参数,执行新进程(execvpe()为GNU专有扩展),或者先设置extern char **environ指针指向准备好的数组,然后execvp

    20710编辑于 2023-12-18
  • 来自专栏Base_CDNKevin

    [操作系统] 进程程序替换

    环境变量 典型应用场景 execl 列表 否 继承 已知完整路径 execlp 列表 是 继承 常用命令调用 execle 列表 否 自定义 需要特殊环境 execv 数组 否 继承 动态生成参数 execvp "8080", "-d", NULL }; execv("/usr/sbin/httpd", args);‘ 适合动态生成的参数列表 argv[0]通常为程序名称 5. execvp :最常用版本 int execvp(const char *file, char *const argv[]); // 示例:执行python脚本 char *py_args[] = { "python ", "script.py", "--verbose", NULL }; execvp("py_args[0]", py_args); 自动搜索PATH,所以直接使用 等脚本的加载执行 这类脚本语言程序执行的是需要解释器 程序这样的形式来执行 // 典型的使用模式 pid_t pid = fork(); if (pid == 0) { // 子进程 execvp

    45400编辑于 2025-02-12
  • 来自专栏Base_CDNKevin

    从零开始手写Shell:详解命令行解释器的实现原理

    g_argv[1] g_argv[2] 命令执行引擎 int Execute() { pid_t id = fork(); if(id == 0) { // 子进程 execvp return 0; } 进程管理三剑客: fork()系统调用: 创建几乎完全相同的进程副本 返回两次:父进程返回子进程PID,子进程返回0 写时复制(Copy-On-Write)优化内存使用 execvp ()函数族: execvp("ls", ["ls","-l",nullptr]) v表示参数以数组形式传递 p表示自动搜索PATH环境变量 成功时替换当前进程映像,失败返回-1 waitpid( 防止僵尸进程(Zombie Process)产生 关键技术深度剖析 进程地址空间示意图 父进程 ├── 代码段 ├── 数据段 ├── 堆 ├── 栈 └── 子进程副本(fork后) └── 被execvp 替换为新程序 函数调用关系图 异常处理机制 execvp失败处理: 子进程立即exit退出 父进程通过waitpid回收 内存安全防护: 固定大小缓冲区(COMMAND_SIZE) 参数个数限制

    87210编辑于 2025-02-13
领券