用c语言创建ls命令
我正在尝试创建ls命令。首先,如果我输入“ls”,代码不起作用,只有当我输入完整路径时,代码才起作用。其次,它不是在exevcp()之后循环。为什么? 谢谢用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
#包括
#包括
#包括
#包括
内部主(空){
字符*行;
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);
}