C语言程序设计--执行命令 - 土拨鼠不再挖洞
2019-01-29 17:04:00 Author: www.cnblogs.com(查看原文) 阅读量:8 收藏



1.1函数原型


int system(char *command);

1.2解释


system()会调用fork()产生子进程,由子进程来调用/bin/sh -c string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。命令执行成功则返回0,否则返回一个非0值。

1.3实验


#include <stdio.h>
#include <stdlib.h>
int main(void){
	int ret1 = system("id");
	printf("%d\n",ret1);
	int ret2 = system("sli");
	printf("%d\n",ret2);
	return 0;
}



2.1函数原型

FILE *popen(const char *command, const char *type);
int pclose(FILE *stream);

2.2解释


popen()会调用fork()产生子进程,然后从子进程中调用/bin/sh -c command来执行参数command的指令。

2.3实验

#include <stdio.h>
#include <stdlib.h>
//使用方法类似文件读写
int main(void){
	FILE* process;
	char buffer[1024];
	process = popen("id", "r");
	fgets(buffer, sizeof(buffer), process);
	printf("%s", buffer);
	pclose(process);
	return 0;
}



3.1函数原型


int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execle(const char *path, const char *arg,..., char * const envp[]);
int execve(const char *filename, char *const argv[],char *const envp[]);

3.2解释


/*
exec函数
调用一种exec函数时,该进程完全由新程序代换,而新程序则从其main函数开始执行。
因为调用exec并不创建新进程,所以前后的进程I D并未改变。
exec只是用另一个新程序替换了当前进程的正文、数据、堆和栈段。
*/

文章来源: http://www.cnblogs.com/KevinGeorge/p/10334519.html
如有侵权请联系:admin#unsafe.sh