【发布时间】:2011-04-28 10:47:23
【问题描述】:
我有下面的代码这里只显示了一部分,我正在检查文件的类型。
struct stat *buf /* just to show the type buf is*/
switch (buf.st_mode & S_IFMT) {
case S_IFBLK: printf(" block device\n"); break;
case S_IFCHR: printf(" character device\n"); break;
case S_IFDIR: printf(" directory\n"); break;
case S_IFIFO: printf(" FIFO/pipe\n"); break;
case S_IFLNK: printf(" symlink\n"); break;
case S_IFREG: printf(" regular file\n"); break;
case S_IFSOCK: printf(" socket\n"); break;
default: printf(" unknown?\n"); break;
}
问题:我做printf("\nMode: %d\n",buf.st_mode);时得到的st_mode的值是33188。
我使用常规文件类型和符号链接测试了我的程序。在这两种情况下,输出都是“常规文件”,即符号链接案例失败,我不明白为什么?
【问题讨论】:
-
这个问题有点不清楚。你在测试一个符号链接,程序说它是一个普通文件吗? buf.st_mode 的值是多少?
-
你需要
lstat()。stat()跟随符号链接并检查它们指向的文件。
标签: c linux symlink system-calls stat