概述用execvp()执行shell命令
我想编写一个像linux shell一样的程序。 我开始写一个小程序来执行“ls”命令。 我无法弄清楚的是,为了让我的程序能够响应像shell这样的命令,我应该如何进行。 (如猫,光盘,目录)。
#include <iostream> #include <unistd.h> #include <sys/types.h> #include <stdlib.h> #define MAX 32 using namespace std; int main() { pID_t c; char s[MAX]; int fd[2]; int n; pipe(fd); c = fork(); if(c == 0) { close(fd[0]); dup2(fd[1],1); execlp(\”ls\”,\”ls\”,\”-l\”,NulL); return 0; } else { close(fd[1]); while( (n = read(fd[0],s,MAX-1)) > 0 ) { s[n] = \’\’; cout<<s; } close(fd[0]); return 0; } return 0; }
我怎样才能让我的程序读取用户input的内容,并将其传递给execlp (或类似的事情)?
是否有可能在前台运行两个linux命令并合并它们的标准输出
如何将linux命令的结果复制到使用c代码的string中?
将输出redirect到windows中另一个命令的命令行参数
如何启动Cyberghost并select国家/地区IP地址,并通过windows命令行在一段时间后自动更改IP地址?
为什么du和Perl的文件大小不一样?
一个shell基本上做到以下几点:
从stdin读取一行
解析该行以制作单词列表
叉子
那么shell(父进程)一直等到子进程结束,而子进程执行由从输入行提取的字列表所表示的命令的代码。
该shell然后在步骤1重新启动。
首先构建一个非常简单的外壳。
如果我正确地理解了一个问题,您可以:
用scanf()读取字符串数组
使用execvp()作为命令运行它(它和execlp() ,但是可以将所有参数作为数组传递)。
就像是:
char args[100][50]; int nargs = 0; while( scanf( \” %s \”,args[nargs] ) ) nargs++; args[nargs] = NulL; /* fork here * … /* child process */ execvp( args[0],args );
总结
以上是内存溢出为你收集整理的用execvp()执行shell命令全部内容,希望文章能够帮你解决用execvp()执行shell命令所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
请登录后查看评论内容