我目前正在编写系统编程作业,其中一部分我需要获取目录中文件的一些信息。
对于文件的统计信息,我们有ctime()
将time_t
类型转换为string
并返回指向它的指针的函数。
但是uid_t
和off_t
类型呢?我通过互联网搜索并找不到任何功能..或者如果不存在任何功能,您能告诉我如何实现这样的功能吗?
我目前正在编写系统编程作业,其中一部分我需要获取目录中文件的一些信息。
对于文件的统计信息,我们有ctime()
将time_t
类型转换为string
并返回指向它的指针的函数。
但是uid_t
和off_t
类型呢?我通过互联网搜索并找不到任何功能..或者如果不存在任何功能,您能告诉我如何实现这样的功能吗?
两者都被定义为算术类型(http://www.opengroup.org/onlinepubs/009695399/basedefs/sys/types.h.html),并且在实践中是正整数。因此,您可以只转换为 unsigned long long,并使用带有“%llu”的 sprintf 转换为字符串。
size_t
并且off_t
只是无符号整数类型。(编辑:off_t
很长?看,教训是,检查你的标题!)
所以使用sprintf
(或其他)使用“%i”格式说明符来转换它们。
编辑时:废话,您在我回答时更改size_t
为。定义在; 看这里。(它也是一个无符号整数类型,但是一个.)uid_t
uid_t
types.h
unsigned short
Linux 的snprintf()支持 type 值的 'z' 格式说明符size_t
。不确定它的便携性,您需要仔细检查“符合”部分。
对于off_t
,您可能需要转换为最大的无符号整数类型,即unsigned long
并使用“lu”说明符。
off_t
是一个long int
:格式=“%ld”
size_t
是一个unsigned int
:格式=“%u”
您可以在函数中使用这些格式sprintf
转换为 char*。
使用 gcc 5.4.0 以下行:
printf("user #%ld did this or that!\n", uid);
提出以下警告:
..main.c:133:9: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 2 has type ‘uid_t {aka unsigned int}’ [-Wformat=]
我建议您也这样做并检查编译器的输出。=)