2009-04-28 56 views
1

我目前正在编写系统编程作业,并且在一部分中我需要获取目录中文件的一些信息。转换:uid_t到字符串,off_t到字符串

对于文件统计,我们有ctime()函数,它将time_t类型转换为string并返回一个指向它的指针。

uid_toff_t类型怎么样?我搜索了互联网,并找不到任何功能。或者,如果没有任何功能,你能告诉我如何实现这样的功能吗?

回答

2

size_toff_t只是无符号整型。 (编辑:off_t是一个很长的时间?请参阅,教训是,检查您的标题!)

因此,使用sprintf(或其他)使用“%i”格式说明符转换它们。

关于编辑:废话,我在回答时将size_t更改为uid_tuid_t定义于types.h;看这里。 (这也是一个无符号整型,但一个unsigned short

+1

我认为实际的教训是,这些在不同的系统上是不同的大小。 – 2009-04-28 10:23:17

+0

是的,这就是我写“检查标题”的原因。强调“你的”。 :) – tpdi 2009-04-28 19:14:49

0

off_tlong int:FORMAT = “%LD”

size_tunsigned int:FORMAT = “%U”

您可以使用这些格式在sprintf函数中转换成char *。

1

Linux'snprintf()支持类型为size_t的值的'z'格式说明符。不确定这是多么便携,您需要仔细检查“CONFORMS TO”部分。

对于off_t,您可能需要转换为最大的无符号整数类型,即unsigned long并使用“lu”说明符。

0

使用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=]

我会建议你做同样的,检查你的编译器的输出。 =)