linux课本第81页的程序

本文介绍了一个在用户态下执行命令的实例程序,该程序通过父进程打印控制菜单并接收命令,子进程根据接收到的命令执行任务。程序使用了fork、execve等系统调用来实现命令的执行。

程序功能是在用户态下执行命令的一个实例程序。

父进程打印控制菜单,并且接收命令。

子进程去根据命令处理任务。

父进程继续打印菜单并接收命令。


源码如下:


#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <string.h>

int main(int argc, char **argv){

	pid_t pid;
	char cmd;
	char *arg_psa[] = {"ps", "-a", NULL};
	char *arg_psx[] = {"ps", "-x", NULL};

	while(1){
		printf("-------------------------\n");
		printf("输入a执行‘ps -a’命令\n");
		printf("输入x执行‘ps -x’命令\n");
		printf("输入q执行退出\n");
		printf("-------------------------\n");

		cmd = getchar();
		getchar();

		if((pid = fork()) < 0){
			printf("fork error...\n");
			return -1;
		}
		if(pid == 0){
			switch(cmd){
				case 'a':
					
					execve("/bin/ps", arg_psa, NULL);
					break;
				case 'x':
					execve("/bin/ps", arg_psx, NULL);
					break;
				case 'q':
					break;
				default:
					perror("wrong cmd...\n");
					break;
			}
		
			exit(0);
		}
		else if(pid > 0){
			sleep(1);
			if(cmd == 'q')
				break;
		}
	}

	while(waitpid(-1, NULL, WNOHANG) > 0);

	return 0;
}

具体调用的函数和代码都是很基础的,不做解释。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值