您好,我想读取和写入目录,就像读取和写入文件一样。我总是使用open
、read
和函数write
,close
这意味着我使用描述符。但是在目录上执行此操作不起作用,open
调用有效,但read
返回 -1 并且errno
是 EISDIR。我是否被迫使用流来读取目录?
问问题
2901 次
2 回答
2
和read()
系统write()
调用不能用于目录。相反,getdents()
/getdents64()
系统调用用于读取目录。目录根本不能直接写入。
此外,glibc 没有为getdents()
/getdents64()
系统调用提供包装器 - 相反,它提供了符合 POSIX 的readdir()
函数,该函数是使用这些系统调用实现的。大多数程序应该使用readdir()
,但可以直接使用 调用系统调用syscall()
。
于 2013-06-16T10:02:38.393 回答
0
我在 Stack Overflow 中找到了这段代码(How can I get the list of files in a directory using C or C++?),这对我理解它的工作原理有很大帮助:
#include <dirent.h>
#include <stdio.h>
#include <string.h>
int main(){
DIR* dirFile = opendir( "." );
struct dirent* hFile;
if ( dirFile )
{
while (( hFile = readdir( dirFile )) != NULL )
{
if ( !strcmp( hFile->d_name, "." )) continue;
if ( !strcmp( hFile->d_name, ".." )) continue;
// in linux hidden files all start with '.'
if ( gIgnoreHidden && ( hFile->d_name[0] == '.' )) continue;
// dirFile.name is the name of the file. Do whatever string comparison
// you want here. Something like:
if ( strstr( hFile->d_name, ".c" ))
printf( "found an .txt file: %s", hFile->d_name );
}
closedir( dirFile );
}
}
于 2013-06-16T09:41:59.393 回答