gpt4 book ai didi

c - stat() 不能正常工作?

转载 作者:行者123 更新时间:2023-12-02 07:03:17 25 4
gpt4 key购买 nike

我在这里做错了什么,还是 Ubuntu 12.04(最新补丁)有问题?一般来说,我正在编写一段 SUID 代码来做一些这个,做一些那个,出于安全原因,我想确保程序目标文件是一个常规文件,而不是其他文件,最明显的是符号链接(symbolic link)。

visti@honecker:~/Project/Images$ ls -al
total 3080
drwxrwxr-x 2 visti visti 4096 May 29 14:18 .
drwxrwxr-x 4 visti visti 4096 May 29 14:42 ..
lrwxrwxrwx 1 visti visti 10 May 29 14:18 foo -> image-ntfs
-rw-rw-r-- 1 visti visti 3145728 May 28 16:17 image-ntfs

我这里有一个目录,其中包含一个常规文件和一个指向该文件的符号链接(symbolic link)。在我看来 stat() 应该能够区分这两者,但事实并非如此:

main (int argc, char **argv) {
int i;
struct stat buf;
if (argc < 2)
exit(1);
for (i = 1; i < argc ; i++) {
if (stat (argv[i], &buf) == -1) {
perror("foo");
exit(1);
}
printf ("%s,%d\n", argv[i], buf.st_mode & S_IFMT);
}
}

当我针对目录运行编译后的程序时,这就是我得到的结果。这两个文件都只设置了 S_IFREG。我做错了什么?

visti@honecker:~/Project/Images$ ../stat *
foo,32768
image-ntfs,32768

最佳答案

如果您想对符号链接(symbolic link)本身进行统计,您可能需要使用 lstat() 而不是 stat()

man stat

lstat() is identical to stat(), except that if path is a symbolic link, then the link itself is stat-ed, not the file that it refers to.

关于c - stat() 不能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16815824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com