Tag: dirent.h

readdir()32/64兼容性问题

我正试图让一些旧的遗留代码在新的64位系统上运行,而且我现在卡住了。 下面是一个小C文件,我用它来测试当前正在破坏的实际程序中存在的function。 #define _POSIX_SOURCE #include #include #undef _POSIX_SOURCE #include main(){ DIR *dirp; struct dirent *dp; char *const_dir; const_dir = “/any/path/goes/here”; if(!(dirp = opendir(const_dir))) perror(“opendir() error”); else{ puts(“contents of path:”); while(dp = readdir(dirp)) printf(” %s\n”, dp->d_name); closedir(dirp); } } 问题: 操作系统是Red Hat 7.0 Maipo x86_64。 遗留代码是32位,必须保持这种方式。 我已经使用带有g++的-m32标志使程序的编译工作正常。 出现的问题是在运行时, readdir()得到一个64位的inode,然后抛出一个EOVERFLOW错误,当然没有打印出来。 我尝试使用readdir64()代替readdir()取得一些成功。 我不再得到errno EOVERFLOW,并且终端上出现了线条,但文件本身并没有被打印出来。 我假设这是由于缓冲区不是什么直接期望。 我试图使用dirent64来尝试缓解这个问题,但每当我尝试这个时,我得到: test.c:19:22 error: […]

stat输出目录中文件的错误值

我正在尝试创建一个函数,它将获取目录中每个文件的输入目录路径(filrOrDir)和输出信息:文件名,大小和上次访问日期。 该程序编译并打印所有内容。 它打印正确的文件名,但是对于每个文件,大小和上次访问日期都是错误的。 我想也许是因为我的变量声明在while循环中,但我移动它们仍然会得到相同的结果。 有人可以给我一个关于我做错的提示或提示吗? 以下是我的代码: void dirInfo(char *fileOrDir) { DIR *d; struct dirent *dir; d = opendir(fileOrDir); while((dir = readdir(d)) !=NULL) { struct stat *buffer = (struct stat *)malloc(sizeof(struct stat)); char accessString[256]; char *name = (char *)malloc(sizeof(char)); struct tm *tmAccess; int size = 0; name = dir->d_name; stat(name, buffer); printf(“%s “, name); size = […]

访问C中的目录

该程序是打开一个目录,并显示文件的名称…即,如果有一个文件..应该说FILE …. else DIRECTORY ..但程序显示所有文件作为目录.. 任何人都可以检查代码是否有任何错误…. thnx #include #include #define DIR_path “root/test” main() { DIR *dir; dir=opendir(DIR_PATH); printf(“THe files inside the directory :: \n”); struct dirent *dent; if(dir!=NULL) { while((dent=readdir(dir))) { FILE *ptr; printf(dent->d_name); if(ptr=fopen(dent->d_name,”r”)) { print(“\tFILE\n”); fclose(ptr); } else printf(“\t DIRECTORY\n”); } close(dir); } else printf(“ERROR OPENIN DIRECTORY”); }