Mac OS X的Getattrlist系列函数

来源:互联网 发布:知乎 金庸 古龙 编辑:程序博客网 时间:2024/05/22 05:04

函数

getattrlist,fgetattrlist,getattrlistat——获取文件系统属性

函数原型

#include <sys/attr.h>

#include <unistd.h>

 

int getattrlist(const char* path, struct attrlist* attrList, void * attrBuf, size_t attrBufSize,unsigned long options);

 

int fgetattrlist(int fd, struct attrlist *attrList,void * attrBuf, size_t attrBufSize,unsigned long options);

 

int getattrlistat(int fd, const char*path,struct attrlist * attrList, void* attrBuf, size_t attrBufSize,unsigned longoptions);

 

描述

getattrlist()函数返回文件系统对象的属性(即元数据)。getattrlist()函数用在文件是路径时,而fgetattrlist()则用在文件是文件描述符时。

除了路径是相对路径时,系统调用getattrlistat()等价于getattrlist()。路径是相对路径时,返回相对于文件描述符(而非当前工作路径)的path路径的属性。如果getattrlistat()的fd参数是AT_FDCWD,使用的是当前工作目录,此时与调用getattrlist()效果一致。

可以把getattrlist()看作是stat()的加强版。他们都通过attrBufattrBufSize指定的缓冲区返回指定文件系统的属性。参数attrList指定返回什么属性,参数options让你控制函数行为的具体方面。

并非所有的卷都支持所有的属性。详见ATTR_VOL_ATTRIBUTES部分关于如何判断一个卷是否支持特定属性的描述。

此外,你应该只请求你所需要的属性。在某些卷格式上获取某些属性需要高消耗的计算。例如,在non-HFS[Plus]卷上,计算ATTR_DIR_ENTRYCOUNT属性消耗非常高。所以不需要的属性尽量不要去请求。

参数path必须引用有效的文件系统对象。读写和运行的权限都不需要,但path所指向的所有目录必须是可搜索的。

参数attrList指向attrlist结构体,该结构体定义在<sys/attr.h>。它指定函数返回什么属性,在调用函数前需要填充该结构体。结构体定义如下:

typedef u_int32_t attrgroup_t;

 

struct attrlist {

        u_short     bitmapcount; /* numberof attr. bit sets in list */

        u_int16_t   reserved;    /* (to maintain 4-byte alignment) */

        attrgroup_t commonattr;  /* commonattribute group */

        attrgroup_t volattr;     /* volumeattribute group */

        attrgroup_t dirattr;     /*directory attribute group */

        attrgroup_t fileattr;    /* fileattribute group */

        attrgroup_t forkattr;    /* forkattribute group */

 };

 #define ATTR_BIT_MAP_COUNT 5

各字段定义如下:

Bitmapcount:属性数

Reserved:保留。必须置零

Commonattr:公共属性请求位。公共属性与所有类型的文件系统相关。

Volattr:卷属性请求位。卷属性与卷(即挂载的文件系统)相关。如果请求卷属性,path路径必须指向一个卷的根目录。此外,你请求了文件或目录的属性就不能请求卷属性。

Dirattr:目录属性请求位。

Fileattr:文件属性请求位。

Forkattr:叉属性请求位。

除了在下表中特别说明的,属性都是只读的。Setattrlist()可以把属性设为读/写。

参数attrBufattrBufSize指定保存属性的缓冲区。这个缓冲区的格式非常复杂(不在这里讨论),它的初始内容会被忽略。

参数options是函数的行为控制标志位,具体值定义如下:

FSOPT_NOFOLLOW:设置后,如果它作为路径的最后一个组件,它将不会跟随符号链接。

FSOPT_REPORT_FULLSIZE:报告属性的大小就是全部请求属性的大小,如果不设,报告的大小就是实际返回的大小。

FSOPT_PACK_INVAL_ATTRS:设置后,返回全部请求的属性,包括不支持的也会返回。

FSOPT_ATTR_CMN_EXTENDED:设置后,ATTR_CMN_GEN_COUNT和ATTR_CMN_DOCUMENT_ID可以被请求。

0 0
原创粉丝点击