【发布时间】:2013-04-05 06:31:27
【问题描述】:
我在 Linux 上使用stat 系统调用并检索文件信息。
char *parent_dir; // for example: /run/atd.pid/
struct stat buf;
stat(parent_dir, &buf);
buf结构类型:
struct stat {
dev_t st_dev; /* ID of device containing file */
ino_t st_ino; /* inode number */
mode_t st_mode; /* protection */
nlink_t st_nlink; /* number of hard links */
uid_t st_uid; /* user ID of owner */
gid_t st_gid; /* group ID of owner */
dev_t st_rdev; /* device ID (if special file) */
off_t st_size; /* total size, in bytes */
blksize_t st_blksize; /* blocksize for file system I/O */
blkcnt_t st_blocks; /* number of 512B blocks allocated */
time_t st_atime; /* time of last access */
time_t st_mtime; /* time of last modification */
time_t st_ctime; /* time of last status change */
};
我得到很多这样的硬链接:buf.st_nlink。
我的问题是我无法将硬链接的数量与整数值进行比较。我尝试初始化另一个 nlink_t,然后将我的变量与 stat 变量进行比较,但它不起作用。我也试过这个link。
将 nlink_t 转换为 int 的另一种方法,但它不起作用。总是返回相同的数字。
int
parse_to_int(nlink_t *source)
{
int buffer_size = sizeof(*source);
char buffer[buffer_size];
snprintf(&buffer[0], buffer_size, "%lu", (unsigned long)source);
int val = atoi(buffer);
return val;
}
有什么想法吗?
我使用parse_to_int函数时的程序输出:
get stat for: /run/nm-dhclient-wlan0.conf/
nlink_t: 321
get stat for: /run/wpa_supplicant/
nlink_t: 321
get stat for: /run/udisks2/
nlink_t: 321
get stat for: /run/nm-dns-dnsmasq.conf/
nlink_t: 321
...
【问题讨论】:
-
你不能将 nlink_t 类型转换为 int 并使用它吗?还是有其他事情妨碍?失败案例的来源可能有助于解决问题。
-
代码没有失败。如果我尝试获取 link 中描述的值,它总是返回一个数字。
-
@gkiko:我不明白这种行为。请展示一个显示问题的最小程序。
-
我已经编辑了问题