所以,这里的目标是建立一个linux shell,以便将用户输入处理成多少个参数和参数本身 - 最终到fork和execvp。我遇到了让我的命令分开的问题。我需要计算它们,它工作正常,并将命令分成可以调用它们的char指针数组。如果你只有一个命令,我有一个方法可以使用它,但如果你做了两个,那么它会被淘汰。我把它弄糟了,然后回到这个方法,因为我觉得我离我更近了。无论如何......这是标准的操作系统 - 家庭作业 - 。我不是在寻找答案,只是寻找一些指导或示例。最终,如果我目前正在使用的这种方法不能通过execvp运行,我也很感激,只是知道这一点...
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
using namespace std;
int count_args(char *str);
void get_args(char* in_args, char** out_args);
int main() {
string my_path;
char user_input[1064];
char *args[64];
my_path = getenv("PATH");
while (1) {
cout << ">> ";
cin.getline(user_input, 1064);
int num_words = count_args(user_input);
get_args(user_input, args);
for (int i = 0; i < num_words; ++i) {
cout << num_words << " " << args[i] << endl;
}
}
return 0;
}
int count_args(char *str) {
int cnt = 0, space;
while (*str) {
if (*str == ' ' || *str == '\n' || *str == '\t') {
space = 0;
} else if (space == 0) {
space = 1;
++cnt;
}
++str;
}
return cnt;
}
void get_args(char* in_args, char** out_args) {
char str[64];
int pos = 0;
for (int i = 0; i < 64; ++i) {
str[i] = '0';
}
while (*in_args) {
if (*in_args != ' ' || *in_args != '\n' || *in_args != '\t') {
str[pos] = *in_args;
++pos;
} else {
memcpy(out_args, str, pos);
pos = 0;
}
*in_args = *in_args + 1;
}
}