所以,我必须构建一个自定义shell,它可以执行所有sh命令和位于/ usr / bin中的所有二进制文件以及包含在shell中的其他binairies文件,但我目前无法使用inbuild cd而且不知道如何使它工作即使通过chdir(我尝试了多次,但如果chdir在循环内,它将为每个shell重新创建一个fork)。
如果你能帮助我,因为我是一名学生并给我提示和建议,那就太棒了。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "color.h"
int expertShell()
{
while(1)
{
FILE *fp;
char path[1035], command[1024];
printf(ANSI_COLOR_BLUE "☁ " ANSI_COLOR_RESET);
fgets(command, sizeof(command)-1, stdin);
if(strncmp(command, "cd", 2) == 0)
{
chdir(strtok(command, "cd "));
}
if(strncmp(command, "exit", 4) == 0)
{
exit(1);
}
if(strncmp(command, "ls", 2) == 0)
{
strcat(strtok(command,"\n"), " --color=always");
}
if(strncmp(command, "nano", 4) == 0 || strncmp(command, "vi", 2) == 0)
{
system(command);
}
else
{
fp = popen(command, "r");
if (fp == NULL) {
printf("Failed to run command\n" );
exit(1);
}
while (fgets(path, sizeof(path)-1, fp) != NULL) {
printf("%s", path);
}
pclose(fp);
}
}
}
答案 0 :(得分:1)
if(cdInBuild != 0)
您需要实际调用该函数。如上所述,这是检查cdInBuild
是否为非空函数指针(始终为真)。
if(cdInBuild(command) != 0)