在linux系统上打印文件的uid

时间:2010-06-06 13:04:12

标签: c linux

我正在学习c编程。我试图使自己的程序类似于 ls 命令,但选项较少。我正在做的是将输入目录/文件名作为参数,然后获取所有目录条目 dirent struct(如果是目录)。

之后我使用stat()来获取文件的所有信息但是这里是我的问题,当我使用write()打印这些值时它很好但是当我想用printf()打印这些时我得到警告:格式'%ld'需要类型'long int',但参数2的类型为'__uid_t'。我不知道在%ld 的位置以及其他特殊数据类型应该使用什么。

2 个答案:

答案 0 :(得分:9)

__uid_t没有格式说明符,因为这种类型是系统特定的,不是C标准的一部分,因此printf不知道它。

通常的解决方法是将其推广到适合您所定位的所有系统上的整个UID值范围的类型:

printf("%lu\n", (unsigned long int)uid); /* some systems support 32-bit UIDs */

答案 1 :(得分:1)

你可以把它投射到一个长的int:

printf("foobar: %ld\n", (long int)your_uid_t_variable);