linuxC函数之exec

56 篇文章 2 订阅

吐舌头exec函数族用来在当前进程中载入可执行文件,替换当前的数据段和代码段,

而后执行载入的可执行文件,其后缀释义如下:

1. “l”,以列举的方式传参如:

execl("/bin/ls", "ls", "-a", "-l", "-i", NULL);

1. “v”,以指针数组的方式传参如:

char* buf[] = {"ls", "-a", "-l", "-i", NULL};

execv("/bin/ls", buf);

1. “p”,在当前运行的环境变量下查找可执行文件:

execvp("ls", buf);

1. “e”,以自定义环境变量的方式传参

栗子如下

/*************************************************************************
	> File Name: exec.c
	> Author: XXDK
	> Email: v.manstein@qq.com 
	> Created Time: Wed 15 Mar 2017 12:20:57 AM PDT
 ************************************************************************/

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
// exec使用可执行文件的代码段和数据段填充当前进程
// 故而,执行正确不会返回原程序
int main()
{
	char* buf[] = {"ls", "-a", "-l", "-i", NULL};
	int ret;
#if 0
	// 1. 
	ret = execl("/bin/ls", "ls", "-a", "-l", "-i", NULL);
	if(-1 == ret) {
		perror("error\n");
	}
#endif

#if 0
	// 2.
	ret = execv("/bin/ls", buf);
	if(-1 == ret) {
		perror("error\n");
	}
#endif
	char* buff[] = {"a.out"};
	printf("xxdk\n");
	// 自己执行自己
	execv("./a.out", buff);

	// 3.
	ret = execvp("ls", buf);
	if(-1 == ret) {
		perror("error\n");
	}

	exit(1);

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值