Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.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_Ls - Fatal编程技术网

用c语言创建ls命令

用c语言创建ls命令,c,linux,ls,C,Linux,Ls,我正在尝试创建ls命令。首先,如果我输入“ls”,代码不起作用,只有当我输入完整路径时,代码才起作用。其次,它不是在exevcp()之后循环。为什么? 谢谢 #包括 #包括 #包括 #包括 内部主(空){ 字符*行; char*args[32]; memset(args,0,sizeof(args)); 而(1){ 行=(字符*)malloc(1024); printf($); fgets(第1024行,标准输入); args[0]=strtok(行“”); args[1]=strtok(NUL

我正在尝试创建ls命令。首先,如果我输入“ls”,代码不起作用,只有当我输入完整路径时,代码才起作用。其次,它不是在exevcp()之后循环。为什么? 谢谢

#包括
#包括
#包括
#包括
内部主(空){
字符*行;
char*args[32];
memset(args,0,sizeof(args));
而(1){
行=(字符*)malloc(1024);
printf($);
fgets(第1024行,标准输入);
args[0]=strtok(行“”);
args[1]=strtok(NULL,“”);
execvp(args[0],args);
perror(“执行副总裁”);
}  
} 
它没有循环,因为(引用以下内容):

exec
函数系列用新的进程映像替换当前进程映像

换句话说,
execvp()

当我们谈到这个话题时,你可能想仔细阅读一下

我不确定路径问题
execvp()
当然应该搜索
$PATH
(当我在我的计算机上测试代码时也会搜索,所以
ls
/bin/ls
同样有效)

需要记住的一点是,
fgets()
返回终止的换行符,该换行符最终位于
args
数组中。例如,如果在没有参数的情况下输入
ls
,然后按enter键,
args[0]
将设置为
ls\n
”,并且
execvp()
将失败

哦,你有一个内存泄漏,因为你从来没有释放过

它没有循环,因为(引用以下内容):

exec
函数系列用新的进程映像替换当前进程映像

换句话说,
execvp()

当我们谈到这个话题时,你可能想仔细阅读一下

我不确定路径问题
execvp()
当然应该搜索
$PATH
(当我在我的计算机上测试代码时也会搜索,所以
ls
/bin/ls
同样有效)

需要记住的一点是,
fgets()
返回终止的换行符,该换行符最终位于
args
数组中。例如,如果在没有参数的情况下输入
ls
,然后按enter键,
args[0]
将设置为
ls\n
”,并且
execvp()
将失败

哦,你有一个内存泄漏,因为你从来没有释放过

它没有循环,因为(引用以下内容):

exec
函数系列用新的进程映像替换当前进程映像

换句话说,
execvp()

当我们谈到这个话题时,你可能想仔细阅读一下

我不确定路径问题
execvp()
当然应该搜索
$PATH
(当我在我的计算机上测试代码时也会搜索,所以
ls
/bin/ls
同样有效)

需要记住的一点是,
fgets()
返回终止的换行符,该换行符最终位于
args
数组中。例如,如果在没有参数的情况下输入
ls
,然后按enter键,
args[0]
将设置为
ls\n
”,并且
execvp()
将失败

哦,你有一个内存泄漏,因为你从来没有释放过

它没有循环,因为(引用以下内容):

exec
函数系列用新的进程映像替换当前进程映像

换句话说,
execvp()

当我们谈到这个话题时,你可能想仔细阅读一下

我不确定路径问题
execvp()
当然应该搜索
$PATH
(当我在我的计算机上测试代码时也会搜索,所以
ls
/bin/ls
同样有效)

需要记住的一点是,
fgets()
返回终止的换行符,该换行符最终位于
args
数组中。例如,如果在没有参数的情况下输入
ls
,然后按enter键,
args[0]
将设置为
ls\n
”,并且
execvp()
将失败


哦,你有一个内存泄漏,因为你从未释放
它没有循环,因为
execve()
永远不会返回。此外,这似乎是实现
ls
的一种非常奇怪的方式:您应该尝试打开一个目录并读取其内容(文件列表),而不是运行另一个命令

查看和函数,这是实际实现
ls
的一种方法


而且,.

它不会循环,因为
execve()
永远不会返回。此外,这似乎是实现
ls
的一种非常奇怪的方式:您应该尝试打开一个目录并读取其内容(文件列表),而不是运行另一个命令

查看和函数,这是实际实现
ls
的一种方法


而且,.

它不会循环,因为
execve()
永远不会返回。此外,这似乎是实现
ls
的一种非常奇怪的方式:您应该尝试打开一个目录并读取其内容(文件列表),而不是运行另一个命令

查看和函数,这是实际实现
ls
的一种方法


而且,.

它不会循环,因为
execve()
永远不会返回。此外,这似乎是实现
ls
的一种非常奇怪的方式:您应该尝试打开一个目录并读取其内容(文件列表),而不是运行另一个命令

查看和函数,这是实际实现
ls
的一种方法


还有,.

这里有一个使用
c
实现
ls
命令的简单方法。要运行,请使用例如
/xls/tmp

    #include<stdio.h>
    #include <dirent.h>
    void main(int argc,char *argv[])
    {
   DIR *dir;
   struct dirent *dent;
   dir = opendir(argv[1]);   

   if(dir!=NULL)
      {
   while((dent=readdir(dir))!=NULL)
                    {
        if((strcmp(dent->d_name,".")==0 || strcmp(dent->d_name,"..")==0 || (*dent->d_name) == '.' ))
            {
            }
       else
              {
        printf(dent->d_name);
        printf("\n");
              }
                    }
       }
       close(dir);
     }
#包括
#包括
void main(int argc,char*argv[])
{
DIR*DIR;
结构导向
    #include<stdio.h>
    #include <dirent.h>
    void main(int argc,char *argv[])
    {
   DIR *dir;
   struct dirent *dent;
   dir = opendir(argv[1]);   

   if(dir!=NULL)
      {
   while((dent=readdir(dir))!=NULL)
                    {
        if((strcmp(dent->d_name,".")==0 || strcmp(dent->d_name,"..")==0 || (*dent->d_name) == '.' ))
            {
            }
       else
              {
        printf(dent->d_name);
        printf("\n");
              }
                    }
       }
       close(dir);
     }