Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 可能有什么问题,ls没有';我不能靠自己工作_C_Linux_Shell - Fatal编程技术网

C 可能有什么问题,ls没有';我不能靠自己工作

C 可能有什么问题,ls没有';我不能靠自己工作,c,linux,shell,C,Linux,Shell,我必须编写自己的shell,它几乎已经完成了,但我在ls/pwd方面遇到了问题 ls给了我以下错误:无法访问“”:没有这样的文件或目录 pwd以某种方式工作,但它仍然给了我错误:忽略非选项参数 有什么问题吗 #include <sys/types.h> #include <sys/wait.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include &l

我必须编写自己的shell,它几乎已经完成了,但我在ls/pwd方面遇到了问题

ls给了我以下错误:无法访问“”:没有这样的文件或目录

pwd以某种方式工作,但它仍然给了我错误:忽略非选项参数

有什么问题吗

#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
void  parsowanie(char *line, char **argv)
{
    while (*line != '\0') {
        while (*line == ' ' || *line == '\n'|| *line == '\t' )

            *line++ = '\0';
            *argv++ = line;

        while (*line != '\0' && *line!= ' ' && *line != '\t' && *line != '\n')
            line++;
    }
    *argv = '\0';
}
int main()
{

    printf("MicroShell\nAutor:Amadeusz Lewandowski\n");
    char co_chcesz[500],cwd[500],login[50],*argv[1000],*to;
    memset(argv,0,999);
    pid_t pid;
    int status;
    while(strcmp(co_chcesz,"exit\n"))
        {
        sleep(1);
        getcwd(cwd,sizeof(cwd));
        getlogin_r(login,sizeof(login));
        printf("[%s:%s]\n$ ",login,cwd);
        fgets(co_chcesz,1000,stdin);
        if (strcmp(co_chcesz,"help\n")==0)
            {
            printf("autor to miranda orange\n");
            continue;
            }
        pid=fork();

        if(pid==0)
        {
            if (execvp(*argv,argv)<0)
            {
                perror("The following error occurred");
                printf("Value of errno:%d\n",errno);
                    break;
            }
            else
            {
            waitpid(pid,&status,0);
            }
        }
    }
    return 0;
}

#包括
#包括
#包括
#包括
#包括
#包括
#包括
void parsowanie(字符*行,字符**argv)
{
而(*行!='\0'){
而(*line=''| |*line='\n'| |*line=='\t')
*行+='\0';
*argv++=行;
而(*line!='\0'&&&&*line!='&&*line!='\t'&&*line!='\n')
line++;
}
*argv='\0';
}
int main()
{
printf(“MicroShell\nAutor:Amadeusz Lewandowski\n”);
char co_chcesz[500],cwd[500],login[50],*argv[1000],*to;
memset(argv,0999);
pid_t pid;
智力状态;
而(strcmp(co_chcesz,“退出”)
{
睡眠(1);
getcwd(cwd,sizeof(cwd));
getlogin_r(login,sizeof(login));
printf(“[%s:%s]\n$”,登录,cwd);
fgets(co_chcesz,1000,标准);
if(strcmp(co_chcesz,“help\n”)==0)
{
printf(“自动转为米兰达橙色”);
继续;
}
pid=fork();
如果(pid==0)
{

如果(execvp(*argv,argv)您的命令行拆分函数错误。请在此处重新格式化以更好地显示其实现方式:

void  parsowanie(char *line, char **argv)
{
    while (*line != '\0') {
        /* Eating whitespace */
        while (*line == ' ' || *line == '\n'|| *line == '\t' )
            *line++ = '\0';

        /* Adding next command line argument to `argv` */
        *argv++ = line;

        while (*line != '\0' && *line!= ' ' && *line != '\t' && *line != '\n')
            line++;
    }
    *argv = '\0';
}
问题是,在实际知道是否存在下一个命令行参数之前,将下一个命令行参数添加到
argv
。因此,我们必须在
*argv++=line;
之前添加一个测试。
while
语句中的测试现在变得不必要了

void  parsowanie(char *line, char **argv)
{
    while (1) {
        /* Eating whitespace */
        while (*line == ' ' || *line == '\n'|| *line == '\t' )
            *line++ = '\0';

        /* Checking if there are more command line arguments */
        if (!*line)
          {
            /* Terminating `argv` */
            *argv = NULL;
            return;
          }

        /* Adding next command line argument to `argv` */
        *argv++ = line;

        while (*line != '\0' && *line!= ' ' && *line != '\t' && *line != '\n')
            line++;
    }
}

请将输出作为文本放入问题中,而不是作为图像或外部图像的链接-$ls:无法访问“”:没有这样的文件或目录$pwd pwd:忽略非选项参数谢谢!一位朋友告诉我argv的值应该为空,这样才能起作用,但即使我强制它,它也不起作用。请将输出放在问题中,而不是放在注释中。这真的是你的完整代码吗?
parsowanie
从未调用过,而且
argv
从未实际设置过。这只是为了我的考试,截止日期是明天,很多人都在关注我只是不想让他们复制它。无论如何,我解决了这个问题,我只是在那里放了一个循环,用null替换空白:D
waitpid
只有当
pid!=0
时才有意义(这与您的问题无关)