linux下用代码实现系统命令
2015-04-13 16:55
459 查看
<span style="color:#3333ff;">第一例:实现系统命令</span> #include <stdio.h> #include <sys/wait.h> #include <stdlib.h> #include <unistd.h> void my_system(char *str) { pid_t pid; pid=fork(); if(pid<0) { perror("fork"); } if(pid==0) { execlp("/bin/sh","sh","-c",str,NULL); } if(pid>0) { int status=0; wait(&status); if(WIFEXITED(status)) { printf("return value=%d\n",WEXITSTATUS(status)); } } } int main(int argc, char *argv[]) { char str[50]=""; printf("please input :"); fgets(str,10,stdin); my_system(str); return 0; } <span style="color:#3333ff;">第二例:实现系统命令并将其打印出的数据放入数组</span> #include <stdio.h> #include <sys/wait.h> #include <stdlib.h> #include <unistd.h> int main(int argc, char *argv[]) { pid_t pid; int ret = 0; int fd[2] = {0}; //创建管道 ret = pipe(fd); if(ret == -1) { perror("pipe"); _exit(1); } //创建子进程,目的 1exec 2复制管道文件描述符 pid = vfork(); if(pid < 0) { perror("vfork"); } else if(pid == 0) { dup2(fd[1], 1);//标准输出重定向到管道的写端 //该命令打印的是 主板序列号,是我项目需要,大家可以将str改为自己想要实现的命令,如 ls char str[50]="dmidecode -s system-serial-number"; execlp("/bin/sh","sh","-c",str,NULL); } else { char result[100] = ""; read(fd[0], result, sizeof(result));//从管道的读端读取数据 char msg[100] = ""; sprintf(msg, "%c%c:%c%c:%c%c",result[7],result[8],result[10],result[11],result[13],result[14]); printf("---->%s\n",msg); } return 0; } <span style="color:#3333ff;">后续发现: 上面第一例的代码 实际上是用代码封装了system()函数,本人测试过,将命令当做参数写入system();也可以实现相应的效果,下面是从网上摘抄的system()源码: </span> int system(const char * cmdstring) { pid_t pid; int status; if(cmdstring == NULL){ return (1); } if((pid = fork())<0){ status = -1; } else if(pid == 0){ execl("/bin/sh", "sh", "-c", cmdstring, (char *)0); -exit(127); //子进程正常执行则不会执行此语句 } else{ while(waitpid(pid, &status, 0) < 0){ if(errno != EINTER){ status = -1; break; } } } return status; }
相关文章推荐
- linux下使用系统调用编程实现copy命令功能
- linux下使用系统调用编程实现dir命令功能
- linux系统调用实现代码分析
- Linux系统利用Crontab命令实现定时重启
- linux系统调用实现代码分析
- linux下通过字符模块实现类似ps命令的查看系统进程方法
- [zt] Linux 下几个文件操作命令的代码实现
- Linux 下几个文件操作命令的代码实现
- Linux 下几个文件操作命令的代码实现
- Linux 下几个文件操作命令的代码实现(转载)
- Linux 下几个文件操作命令的代码实现
- Linux下模拟ping命令的C代码实现1
- Linux下模拟ping命令的C代码实现2
- Linux系统利用Crontab命令实现定时重启
- Linux 下几个文件操作命令的代码实现
- 在linux下代码实现ls -l 命令(利用移位 和 与 操作 对指定位的分离 )(指定位段的分离)
- Linux 下几个文件操作命令的代码实现
- Linux编程实践——代码实现ac命令
- linux下tree、命令的用法及实现代码
- 实现linux cp命令( 系统调用版 )