首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >stat()不能正常工作?

stat()不能正常工作?
EN

Stack Overflow用户
提问于 2013-05-29 21:54:05
回答 1查看 946关注 0票数 2

我在这里做错了什么,或者是Ubuntu 12.04 (最新补丁)有什么问题?通常我会写一段SUID代码来做一些这个,一些那个,出于安全原因,我想确保程序的目标文件是一个常规文件,而不是其他文件,最明显的是symlink。

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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。我做错了什么?

代码语言:javascript
复制
visti@honecker:~/Project/Images$ ../stat *
foo,32768
image-ntfs,32768
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-29 21:56:40

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

man stat

path lstat()与

()相同,不同之处在于如果路径是符号链接,则链接本身是stat的,而不是它引用的文件。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16815824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档