我有一个C程序,它从stdin中读取字符(使用getchar),直到读取一个空行,然后添加一个NULL元素,并在空行被发送到execve之前读取所有字符。然后,读取更多字符并将其添加到同一个数组(我在第一次调用execve后尝试重置),直到读取另一个空行,然后执行第二个部分。我在每次调用execve之后使用memset重置数组时遇到问题,并且使用args [i] = NULL以便我可以将我的数组传递给execve。
e.g。用法:
回波
您好
看到空行后执行“echo hello”
猫
再见
*应该cat文件“再见”,但前两个参数实际上是“echo”和“NULL”
int main()
{
int pid, status, c, size = 10, length = 0, i, blankflag = 0, alrdyexec = 0;
char argument[1000];
char **args;
char *token;
args = (char**)malloc(size);
extern int process(char **args);
fflush(stdout);
while ((c = getchar()) != EOF) {
if (length == size) {
size += 10;
args = realloc(args, size);
}
if (c != '\n') {
argument[length++] = c;
blankflag = 0;
alrdyexec = 0;
} else if ((c == '\n') && (blankflag == 0)) {
blankflag = 1;
argument[length++] = c;
} else if ((c == '\n') && (blankflag == 1) && (alrdyexec == 0)) {
alrdyexec = 1;
i = 0;
memset(args, 0, sizeof(args));
token = strtok(argument, "\n");
while (token != NULL) {
args[i] = token;
token = strtok(NULL, "\n");
i++;
}
args[i] = NULL;
// here it executes a function which runs execve
}
}
return(0);
}