📄 p6-8.c
字号:
#include <sys/types.h>#include <sys/wait.h>#include <stdio.h>#include <stdlib.h>#include "err_exit.h"void parse(char *, char **);void execute(char **);int main(void){ char buf[1024]; char *args[64]; for (;;) { /* 给出提示符并读入命令 */ printf("Command: "); if (fgets (buf, sizeof(buf), stdin) == NULL){ printf("\n"); exit(EXIT_SUCCESS); } /* 分解字符串为参数 */ parse(buf, args); /* 执行命令 */ execute(args); }}/* parse--分解buf中的命令为独立的参数 */void parse(char *buf, char **args){ while (*buf != '\0') { /* 用空字符'\0'替代空白字符使得前一参数以空字符结束 */ while ((*buf==' ')||(*buf=='\t'||(*buf=='\n'))) *buf++ = '\0'; /* 保存该参数 */ *args++ = buf; /* 跳过此参数 */ while ((*buf!='\0') && (*buf!=' ') && (*buf!='\t') && (*buf!='\n')) buf++; } *args='\0';}/* execute--派生一子进程执行此程序 */void execute(char **args){ int pid, status; /* 创建一子进程 */ if ((pid=fork()) <0) err_exit("fork"); /* 子进程执行if内的代码 */ if (pid==0) { execvp(*args,args); err_exit("fork"); } /* 父进程等待子进程完成 */ waitpid(pid, &status, 0); pr_exit(status);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -