Tag: stat

如何确定Win32上的最佳磁盘IO块大小?

在Posix系统上,stat结构的st_blksize成员包含给定文件的IO的最佳块大小。 看起来stat(_stat和_stat64)的Win32实现不支持此字段。 什么是确定给定文件或文件系统的最佳IO块大小的Win32等效方法?

在Posix中,如何使用类型dev_t?

我所追求的是这种类型的含义以及可以使用它的界面。 在Posix规范中解释了dev_t用于设备ID。 但是,对于路径描述的任何对象,设备ID是什么意思,可以是文件,直接,fifo或物理设备? 例如,调用stat()会给你一个包含这种类型成员的结构; 并且您可以在文件系统中统计任何类型的对象。 对于不同的文件类型,设备ID应具有不同的含义。

什么是windows中的lstat()替代品?

在linux中,当stat()与断开的链接文件一起使用时,它会以-1失败。 所以我使用了成功的lstat() 。 对于Windows中的相同情况, _stat()失败并出现断开的快捷方式,但Windows中没有_lstat() 。 请帮助在windows中找到lstat()的替代方案。

使用C中的stat(2)打印文件权限,例如’ls -l’

我正在尝试编写一个模拟unix命令ls -l的小型C程序。 为此,我使用stat(2)系统调用并遇到了写入权限的小打嗝。 我有一个mode_t变量,它保存来自st_mode的文件权限,并且将该值解析为s字符串表示并不困难,但我只是想知道是否有更好的方法来做到这一点。

c和LD_PRELOAD。 拦截open和open64调用,但不是stat64

我做了一个小的共享库,试图拦截open,open64,stat和stat64 sys调用。 当我导出LD_PRELOAD并运行oracle的sqlplus时,我可以看到open和open64调用的痕迹,但没有stat和stat64调用的痕迹。 共享库是一个单独的c文件,其中包含sys调用的所有定义。 为什么有些系统调用被截获而其他系统没有被截获? 谢谢你的帮助。

MINIX内部碎片2

我正在用C编写一些软件,以递归方式列出给定目录中的所有文件,现在我需要计算出内部碎片。 我花了很长时间研究这个,并发现ext2上的内部碎片只发生在最后一个块中。 我知道从理论上的inode数字你应该能够获得第一个和最后一个块地址,但我不知道如何。 我已经研究过stat() , fcntl()和各种方法。 如何从inode编号中获取最后一个块地址? 我还想到,一旦我有了最后一个块的地址,我可以测试一下,看看该块中有多少可用空间,这将给我内部碎片。 我知道有一个get_inode和一个get_block命令,但get_block不知道!

S_ISDIR()的问题导致C(可能因为stat()没有正确设置它的结构?)

我希望我的程序获取一个目录,然后打印该目录的内容并说明每个项目是否是目录。 如果我给它一个包含文件F1.txt和F2.txt以及文件夹D1,D2和D3的目录,它应该打印: F1.txt不是目录 F2.txt不是目录 D1是目录 D2是目录 D3是目录 char* curr[100]; DIR* dirp = opendir(name); struct dirent* x; struct stat fstat; //go to each file til readdir gives NULL while((x = readdir(dirp)) != NULL) { //store name of file curr[0] = (x -> d_name); //ignore files starting with “.” if(*curr[0] == ‘.’) continue; //set status stat(curr[0], &fstat); […]

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 = […]

仅列出常规文件(没有目录)问题

你知道为什么这个程序没有列出某些文件,即使它们是“常规”的吗?: #include #include #include #include #include int main(void) { DIR *dh = opendir(“./”); // directory handle struct dirent *file; // a ‘directory entity’ AKA file struct stat info; // info about the file. while (file = readdir(dh)) { stat(file->d_name, &info); printf(“note: file->d_name => %s\n”, file->d_name); printf(“note: info.st_mode => %i\n”, info.st_mode); if (S_ISREG(info.st_mode)) printf(“REGULAR FILE FOUND! […]

如何使用S_ISREG()和S_ISDIR()POSIX宏?

这是我写的一个C程序,用于递归导航和输出目录和常规文件。 它在我的Linux机器上编译并运行良好。 但是在Solaris上, dit->d_type == 8检查和其他类似的检查不起作用,因为没有d_type字段。 我已经读过这个问题的答案是使用S_ISREG()和S_ISDIR()宏,但是它们在我目前的代码中完全无法工作。 我评论了在我的Linux机器上运行的行。 #include #include #include #include #include #include #include #include void helper(DIR *, struct dirent *, struct stat, char *, int, char **); void dircheck(DIR *, struct dirent *, struct stat, char *, int, char **); int main(int argc, char *argv[]){ DIR *dip; struct dirent *dit; struct stat statbuf; […]