Linux C获取文件属性

From: http://www.tianya360.com/html/xitonganzhuang/caozuoxitong/2010/0524/924.html

Linux下如何在C下面判断一个文件是不是连接?
  

判断上面生成的软连接文件link,执行后,程序却说是目录,不知道是为什么?源代码如下:(文件名:mstat.c)
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char **argv)
{
struct stat buf;
mode_t mode;
char type[80];
int fd;

if(argc != 2)
{
puts("USAGE: mstat {file}");
exit(EXIT_FAILURE);
}

if((fd = open(argv[1], O_RDONLY)) < 0)
{
perror("open");
exit(EXIT_FAILURE);
}

if((fstat(fd, &buf)) < 0)
{
perror("fstat");
exit(EXIT_FAILURE);
}

mode = buf.st_mode;
printf(" FILE: %s\n", argv[1]);
printf(" INODE: %ld\n", buf.st_ino);
printf(" DEVICE: %d,%d\n", major(buf.st_dev), minor(buf.st_dev));
printf(" SMODE: %#o\n", mode);
printf(" MODE: %#o\n", mode & ~(S_IFMT));
printf(" LINKS: %d\n", buf.st_nlink);
printf(" UID: %d\n", buf.st_uid);
printf(" GID: %d\n", buf.st_gid);

if(S_ISLNK(mode))
strcpy(type, "Symbolic line");
else if(S_ISREG(mode))
strcpy(type, "Regular file");
else if(S_ISDIR(mode))
strcpy(type, "Directory");
else if(S_ISCHR(mode))
strcpy(type, "Character device");
else if(S_ISBLK(mode))
strcpy(type, "Block device");
else if(S_ISFIFO(mode))
strcpy(type, "FIFO");
else if(S_ISSOCK(mode))
strcpy(type, "Socket");
else
strcpy(type, "Unknown type");

printf(" TYPE: %s\n", type);
printf(" SIZE: %d\n", buf.st_size);
printf("BLK SIZE: %ld\n", buf.st_blksize);
printf(" BLOCKS: %d\n", (int)buf.st_blocks);
printf("ACCESSED: %s", ctime(&buf.st_atime));
printf("MODIFIED: %s", ctime(&buf.st_mtime));
printf(" CHANGED: %s", ctime(&buf.st_ctime));

// close the file
if(close(fd) < 0)
{
perror("close");
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}

执行makd mstat生成执行文件mstat,然后执行./mstat link, 执行后提示link是一个目录,请大家试试,并帮我找找是什么原因。谢谢!

========================================================
如果在SCO上,使用lstat
man stat/lstat/fstat

if((fstat(fd, &buf)) < 0) --> if( (lstat(argv[0],&buf)) <0 )

stat系列调用的法则具体要看你的系统使用手册(man)Top

============================================================

[root@localhost other]# ./mstat link
FILE: link
INODE: 260649
DEVICE: 3,2
SMODE: 0100644
MODE: 0644
LINKS: 1
UID: 0
GID: 0
TYPE: Regular file
SIZE: 98
BLK SIZE: 4096
BLOCKS: 8
ACCESSED: Wed Jul 2 05:10:20 2003
MODIFIED: Wed Jul 2 05:09:49 2003
CHANGED: Wed Jul 2 05:09:49 2003
[root@localhost other]#

=============================================================

lstat(由文件描述词取得文件状态)
相关函数
stat,fstat,chmod,chown,readlink,utime
表头文件
#include<sys/stat.h>
#include<unistd.h>
定义函数
int lstat (const char * file_name.struct stat * buf);
函数说明
lstat()与stat()作用完全相同,都是取得参数file_name所指的文件状态,其差别在于,当文件为符号连接时,lstat()会返回该link本身的状态。详细内容请参考stat()。
返回值
执行成功则返回0,失败返回-1,错误代码存于errno。
范例
参考stat()。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406100.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java druid sqlite_springboot整合druid抛出dbType not support : sqlite异常

最近在搞springboot&#xff0c;将springboot和mybaits整合后没一点毛病&#xff0c;但想自己弄个sql监控&#xff0c;就准备使用阿里的druid来做连接池&#xff0c;毕竟是国产又是大厂出品&#xff0c;号称最牛X的连接池。整合过程就不说了&#xff0c;百度上大把的&#xff0…

Aspose转PDF时乱码问题的解决

主要原因是服务器上一般安装的字体都是有限的&#xff0c;而我们日常生活工作中总是喜欢用一些比较特别的字体&#xff0c;比如宋体GB2312&#xff0c;这时候如果用Aspose转PDF就会出现乱码&#xff0c;解决方法也比较简单&#xff0c;把本地的特殊字体拷贝到服务器的c:\window…

软件设计的火花——Brooks新作及《人月神话》三十五周年讨论会纪要

应UMLChina之邀&#xff0c;本人于6月20日参加了“Brooks新作及《人月神话》三十五周年讨论会”&#xff0c;会上由Brooks的《The Design of Design》4位中文版译者介绍了此书并谈了他们对此书的体会&#xff0c;讲演者与参会者进行了互动。无论是Brooks&#xff0c;还是4位译者…

深入react技术栈(6):React和DOM

我是歌谣 放弃很容易 但是坚持一定很酷 微信公众号关注前端小歌谣 React DoM findDoMNode render React得不稳定方法 Refs React之外得DoM操作 文章参考深入React技术栈

LD_LIBRARY_PATH should not contain the current directory

执行一次export LD_LIBRARY_PATHa directory转载于:https://www.cnblogs.com/tina-ma/p/4390500.html

java setdaemon_Java ThreadGroup setDaemon()方法

Java ThreadGroup setDaemon()方法java.lang.ThreadGroup.setDaemon() 方法改变该线程组的守护进程的状态。当其最后一个线程被停止或它的最后一个线程组被销毁守护线程组会自动销毁。1 语法public final void setDaemon(boolean daemon)2 参数daemon &#xff1a; 如果为true&…

Firefox无法启动,提示Profile is yet in use by another Firefox

From: http://hi.baidu.com/nxhujiee/blog/item/e997ba356c837896a71e1224.html 由于突然断电导致电脑非正常关机&#xff0c;重启之后发现Firefox无法启动&#xff0c;提示Profile is yet in use by another Firefox 经过在网上搜索&#xff0c;发现了解决办法 确认没有firefo…

深入react技术栈(5):React生命周期

我是歌谣 放弃很容易 但是坚持一定很酷 微信搜一搜前端小歌谣 React生命周期 挂载和卸载过程 组件得挂载 组件得卸载 数据更新过程 整体流程 文章参考深入学习React技术栈

戴尔看好Ubuntu超越Windows的十个优势

戴尔近日总在对比Linux开源系统&#xff08;主要是Ubuntu&#xff09;与Windows的功能&#xff0c;列举了Ubuntu比 Windows的独特之处&#xff0c;例如&#xff0c;预装了免费办公软件OpenOffice&#xff0c;启动速度快&#xff0c;可以获取1000多款免费软件等。当然了&#xf…

java jdk 1.8特性_Java JDK1.8新特性之四大函数式接口

JDK 1.8的一些新特性四大核心函数式接口(Consumer、Predicate、Supplier、Function)&#xff0c;结合lambda表达式import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.function.Function;import java.util.function.Predicate;import…

ORA-32004: obsolete and/or deprecated parameter(s) specified

From: http://www.cnblogs.com/rootq/archive/2008/10/23/1318290.html 在系统启动的时候,报错 SQL> startup; ORA-32004: obsolete and/or deprecated parameter(s) specified ORACLE 例程已经启动。 Total System Global Area 289406976 bytes Fixed Size …

深入react技术栈(7):组件化实例:Tab栏组件

我是歌谣 放弃很容易 但是坚持一定很酷 微信公众号关注前端小歌谣 文章参考深入React技术栈

mac下怎么清空缓存(缓存并硬性重新加载)

mac下怎么清空缓存&#xff08;缓存并硬性重新加载&#xff09;

记一次曲折的jsp手工半盲注入

作者&#xff1a;YoCo Smart 来自&#xff1a;习科信息技术 ***作战营 ::{ Silic Group Hacker Army }:: site:http://blackbap.org 前些日子&#xff08;似乎很久很久以前&#xff09;&#xff0c;小X在群里发了一个太平洋汽车网站的注入&#xff0c;jsp的&#xff0c;安敏似乎…

团队项目(NABC分析)

我们团队开发的是《校园导航》软件 &#xff08;1&#xff09;N&#xff08;Need需求&#xff09; 我们的团队主要考虑到我们学校没有自己的校园导航&#xff0c;有时会给同学及参观人员带来不便&#xff0c;又看到好多学校都有自己的导航&#xff0c;所以就从这个需求方面想到…

java中为什么要封装_Java中为什么要为基本类型提供封装类呢?

例如int与Integer的区别&#xff1a;int 是基本数据类型Integer是其包装类&#xff0c;注意是一个类。为什么要提供包装类呢&#xff1f;&#xff1f;&#xff1f;一是为了在各种类型间转化&#xff0c;通过各种方法的调用。否则 你无法直接通过变量转化。比如&#xff0c;现在…

python对找到的匹配项作处理后再替换回去

python在对找到的匹配项进行适当处理后&#xff0c;再替换掉原来那个匹配的项。 #!/usr/bin/python # codingGBKimport re# 对m作适当处理后返回结果 def fun(m):print("in: %s" %m.group(0))ret m.group(0).upper()[::-1]return retsrc "what [can] I do for…

linux indent命令: 调整C原始代码文件的格式

linux indent命令: 调整C原始代码文件的格式 介绍: indent命令可辨识C的原始代码文件&#xff0c;并加以格式化&#xff0c;以方便程序员阅读。 语法: indent [参数][源文件] indent [参数][源文件][-o 目标文件] 选项介绍: -bad: 在声明区段或加上空白行。 -bap: 在程…

Linux目录结构介绍-http://yangrong.blog.51cto.com/6945369/1288072

1、树状目录结构图 2、/目录 目录 描述 / 第一层次结构的根、整个文件系统层次结构的根目录。 /bin/ 需要在单用户模式可用的必要命令&#xff08;可执行文件&#xff09;&#xff1b;面向所有用户&#xff0c;例如&#xff1a;cat、ls、cp&#xff0c;和/usr/bin类似。 …