写一个自己的shell界面
来源:互联网 发布:最近流行的网络词语 编辑:程序博客网 时间:2024/04/29 13:48
1 #include <stdio.h> 2 #include <sys/types.h> 3 #include <sys/wait.h> 4 #include <unistd.h> 5 int main() 6 { 7 while(1) 8 { 9 printf("[myshell@myhostName test]# "); 10 fflush(stdout); 11 char buf[1024]; 12 ssize_t s=read(0, buf, sizeof(buf)-1); 13 if(s > 0) 14 { 15 buf[s-1] = 0; 16 printf("%s\n",buf); 17 } 18 char* _argv[32]; 19 _argv[0] = buf; 20 int i=1; 21 char* start = buf; 22 while(*start) 23 { 24 if(*start == ' ') 25 { 26 *start = 0; 27 start++; 28 _argv[i++] = start; 29 } 30 else 31 start++; 32 } 33 _argv[i] = NULL; 34 pid_t id = fork(); 35 if(id == 0) 36 { //child 37 execvp(_argv[0], _argv); 38 exit(1); 39 } 40 else 41 { //father 42 int status = 0; 43 pid_t ret = waitpid(id, &status, 0); 44 if(ret > 0) 45 { 46 if(WIFEXITED(status)) 47 { } 48 else 49 { 50 printf("child, quit by sig\n"); 51 } 52 } 53 } 54 } 55 return 0; 56 }
用进程替换函数execvp(),来进行编写。
execvp(const char* file, char* const argv[]);
file—->文件名
argv[]—->可变参数列表,用来存放要进行的操作。
execvp()还有其他五个相同类型的函数,分别是:
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 *filename, char *const argv[], char *const envp[]);
其中,execve()函数是最底层的函数,其他五个函数都是调用该函数来实现。
0 0
- 写一个自己的shell界面
- 自己写一个简单的Splash界面的过程
- 自己写一个安卓仿苹果界面的应用
- 自己刚写的一个 file check 的SHELL
- 自己写的一个测试RAC LoadBalance的shell脚本
- 自己写的一个简单得shell得菜单
- 自己写的一个按钮控件,点击时在界面出现一个loading遮罩层
- 自己写的两布局界面
- 利用STL中的map来写一个自己的命令行界面
- 写一个自己的引擎
- 写一个自己的引擎
- 自己写的一个分页
- 自己写的一个ArrayList
- 自己写的一个linkedList
- 自己写的一个例子
- 自己写的一个isNumeric。
- 写一个自己的Filter
- 写一个自己的Dictionary
- NSBundle pathForResource取不到值如何解决?
- 计算几何之二维三维凸包算法
- Deep learning:三十五(用NN实现数据降维练习)
- 8 MySQL 死锁
- 轻松使用Nginx搭建web服务器
- 写一个自己的shell界面
- 心情杂记
- spark 2.1 NettyBlockRpcServer use stream to open block
- 5-55 抓老鼠啊~亏了还是赚了? (20分)
- 使用bintray_release插件轻松上传库到Jcenter
- Android中如何使用SQLite
- 《机器学习》(周志华版)——决策树
- 解读神经网络十大误解
- 【数据结构】二叉树的遍历(递归与非递归)