gpt4 book ai didi

c++ - 使用 execvp() 执行 shell 命令

转载 作者:IT王子 更新时间:2023-10-29 01:21:59 29 4
gpt4 key购买 nike

我想编写一个类似于 Linux shell 的程序。我开始编写一个小程序来执行“ls”命令。我想不通的是我应该如何进行才能让我的程序像 shell 一样响应任何命令。 (例如 cat、cd、dir)。

#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] = '\0';
cout<<s;
}
close(fd[0]);
return 0;
}

return 0;
}

如何让我的程序读取用户输入的内容并将其传递给 execlp(或执行相同操作的类似程序)?

最佳答案

shell 基本上做以下事情:

  1. 从标准输入读取一行
  2. 解析该行以生成单词列表
  3. fork
  4. 然后 shell(父进程)等待子进程结束,而子进程执行从输入行中提取的单词列表表示的命令代码。
  5. 然后 shell 在第 1 步重新启动。

首先构建一个非常简单的 shell 。

关于c++ - 使用 execvp() 执行 shell 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27491669/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com