【发布时间】:2013-02-27 13:46:47
【问题描述】:
我创建了一个类似于 Linux 环境的程序。你输入一个命令,它就会为你做。
#include <stdio.h>
#include <string.h>
int main()
{
int pid;
int status;
printf("Enter command: ");
char s[256];
fgets(s,256,stdin);
const char *a[5];
int i = 0;
char* token = strtok(s, " ");
while(token)
{
a[i] = strtok(s," ");
i++;
}
while (a[0] != "exit")
{
if(a[0] = "cd")
{
chdir(a[1]);
}
else
{
pid = fork();
if (pid == 0)
{
execvp(a[0],a);
}
if(pid > 0)
{
wait(&status);
}
}
}
return 0;
}
它使用标记来分隔命令的参数。我尝试运行它,它编译并运行,但没有执行我想要的命令。我认为这可能与它创建令牌的方式有关。任何帮助都会很棒。谢谢。
【问题讨论】:
-
学习使用像
gdb这样的调试器。使用gcc -Wall -g编译您的程序。并清除您的a[5]数组(应该更大,或者一些堆分配的数据)。还可以查看小型免费软件外壳的源代码(例如sash) -
另外
a[0] != "exit"可能不是你想要的。使用strcmp。 -
你真的需要花几个小时来阅读一本好的 C 编程书籍。然后阅读一本好的 Linux 编程书籍,如advancedlinuxprogramming.com;花一两天时间阅读(也许在图书馆)。
标签: c linux shell command exec