【发布时间】:2016-01-04 02:01:49
【问题描述】:
所以我试图用 C 语言编写一个程序,其工作方式类似于 Linux 中的 ls 命令, 目前我已经能够列出我当前工作目录中的文件和目录,但我似乎无法对不是我的 CWD 的目录做同样的事情,我需要在开始之前更改它吗上市吗?或者函数 opendir() 是否适用于任何目录? 它必须像 Linux 中的 ls -li 一样工作,但我处理了打印的东西。 一般来说,我的程序看起来像这样(显然它有更多的东西):
void function(char *directory_to_list){
DIR *d;
struct dirent *dirp;
struct stat filestat;
if ( (d = opendir(directory_to_list)) == NULL){
//print error
}
while ( ( dirp = readdir(d) ) != NULL){
//here i call the stat() function for every entry to get various information
if (stat(dirp->d_name, &filestat) == -1){
continue;
}
//various prints
}
closedir(d);
}
编辑:命令将是 -> ls -li [-dir] 所以如果你没有得到任何目录,你只需列出你的 CWD。p>
EDIT2:没有返回错误,它什么也不做,它打开目录就好了,但没有列出任何东西,所以我猜 stat 调用做得不好,还添加了我如何调用 stat() 的行。
【问题讨论】:
-
列出密码中没有的内容是什么意思?
ls -li的目标是只列出密码中的内容。你的意思是如果你传入一个目录来列出? -
确切地说,命令应该是这样的: ls -li [-dir] 所以 dir 是选项,这意味着如果你不通过任何你列出你的 CWD 否则你列出你通过的目录,抱歉解释不好...
-
当您为
[-dir]标志传递无效目录时,您能显示输出吗?那是您当前使用有效目录获得的内容吗?我认为问题可能在于您错误地使用了相对路径。 -
现在它什么也不做,没有错误,即使我通过完整路径它什么也不做,而且显然它打开目录就好了。
-
打印出
dir->d_name。您会看到它只是一个基本文件名,而不是文件的完整路径。您需要在d_name前面加上完整路径或可从 CWD 到达的相对路径,并将其传递给stat。