Linux下系统调用之exec函数族探索
主要通过在一个C程序代码调用另外一个C代码生成的执行文件来说明。
说是exec系统调用,实际上在Linux中,并不存在一个exec()的函数形式,exec指的是一组函数,一共有6个,分别是:
#include <unistd.h>
extern char **environ;
int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg, ..., char *const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execve(const char *path, char *const argv[], char *const envp[]);
返回值
如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno 中。
l表示以参数列表的形式调用
v表示以参数数组的方式调用
e表示可传递环境变量
p表示PATH中搜索执行的文件,如果给出的不是绝对路径就会去PATH搜索相应名字的文件,如PATH没有设置,则会默认在/bin,/usr/bin下搜索。
具体示例:
#include <stdio.h>void main() { int i; if ( fork() == 0 ) { /* 子进程程序 */// for ( i = 1; i <10; i ++ ) printf("This is child process/n"); } else { /* 父进程程序*/ // for ( i = 1; i <10; i ++ ) printf("This is parent process/n"); } }
运行结果:
调用上面生成2进制文件:
#include <stdio.h>#include <stdlib.h>#include<unistd.h>#include <errno.h>//char command[256];void main(){ int rtn; /*子进程的返回数值*/ /* 从终端读取要执行的命令 */ printf( ">" ); // fgets( command, 256, stdin ); // command[strlen(command)-1] = 0; if ( fork() == 0 ) {/* 子进程执行此命令 */// execlp( "test", NULL ); // execlp( "test", NULL ); // execlp("ls","-al",NULL); execl("/home/buyingfei888/test",NULL); /* 如果exec函数返回,表明没有正常执行命令,打印错误信息*/ // perror( ); exit( errno ); } else {/* 父进程, 等待子进程结束,并打印子进程的返回值 */ wait ( &rtn ); printf( " child process return %d/n", rtn ); }}
运行结果:
>更多相关文章
- 11-131分钟学会U盘启动安装Linux系统
- 11-13克隆MAC地址来绕过强制门户
- 11-13Linux运维常见故障及处理的 32 个锦囊妙计
- 11-13如何快速以管理员权限运行Linux命令?
- 11-13超全面的Linux应急响应技巧
- 11-136 款面向 Linux 用户的开源绘图应用程序
首页推荐
佛山市东联科技有限公司一直秉承“一切以用户价值为依归
- 01-11全球最受赞誉公司揭晓:苹果连续九年第一
- 12-09罗伯特·莫里斯:让黑客真正变黑
- 12-09谁闯入了中国网络?揭秘美国绝密黑客小组TA
- 12-09警示:iOS6 惊现“闪退”BUG
- 05-06TCL科技:预计大尺寸面板价格上涨动能有望延
- 05-06新加坡电信Optus任命新首席执行官以重建品牌
- 05-06微软宣布为消费级用户账户提供安全密钥支持
- 05-06当好大数据产业“守门员”(筑梦现代化 共绘
- 04-29通用智能人“通通”亮相中关村论坛
相关文章
24小时热门资讯
24小时回复排行
热门推荐
最新资讯
操作系统
黑客防御