fstat、stat和lstat 区别

nt fstat(int filedes, struct stat *buf);

int stat(const char *path, struct stat *buf);

int lstat(const char *path, struct stat *buf);

一眼就能看出来fstat的第一个参数是和另外两个不一样的,fstat区别于另外两个系统调用的地方在于,fstat系统调用接受的是 一个“文件描述符”,而另外两个则直接接受“

文件全路径”。文件描述符是需要我们用open系统调用后才能得到的,而文件全路经直接写就可以了。

stat和lstat的区别:当文件是一个符号链接时,lstat返回的是该符号链接本身的信息;而stat返回的是该链接指向的文件的信息。(这样记,lstat比stat多了一个l,因此它是

有本事处理符号链接文件的,因此当遇到符号链接文件时,lstat当然不会放过。而 stat系统调用没有这个本事,它只能对符号链接文件睁一只眼闭一只眼,直接去处理链接所指

文件喽) 

  1. /* 
  2.  * Linux文件属性结构体信息 
  3.  * struct stat 
  4.  * { 
  5.  *  dev_t st_dev;//设备 
  6.  *  ino_t st_ino;//结点 
  7.  *  mode_t st_mode;//模式 
  8.  *  nlink_t st_nlink;//硬连接 
  9.  *  uid_t st_uid;//用户ID 
  10.  *  gid_t st_gid;//组ID 
  11.  *  dev_t st_rdev;//设备类型 
  12.  *  off_t st_off;//文件字节数 
  13.  *  unsigned long st_blksize;//块大小 
  14.  *  unsigned long st_blocks;//块数 
  15.  *  time_t st_atime;//最后一次访问时间 
  16.  *  time_t st_mtime;//最后一次修改时间 
  17.  *  time_t st_ctime;//最后一次属性改变时间 
  18.  * } 
  19.  * 可通过stat或fstat函数获得文件的其他属性 
  20.  * stat函数用来判断没有打开的文件,而fstat函数用来判断打开的文件。 
  21.  * 
  22.  */ 
  23. #include <unistd.h>  
  24. #include <sys/stat.h>   
  25. int main(void)  
  26. {  
  27.     struct stat buf;  
  28.     stat("/etc/passwd",&buf);  
  29.     /* 
  30.      * stat函数 
  31.      * 取得文件的属性 
  32.      * sys/stat.h,unistd.h 
  33.      * int stat(const char *file_name,struct stat*buf); 
  34.      * 将参数file_name所指的文件状态复制到参数buf所指的结构中 
  35.      * 成功返回0,失败返回-1,错误存储于errno 
  36.      */  
  37.     printf("/etc/passwd文件的大小是:%d/n",buf.st_size);  
  38.     printf("/etc/passwd文件的最后一次修改时间是:%d/n",buf.st_ctim);  
  39.     return 0;  
  40. }  

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

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

相关文章

Linux的帧缓冲设备

Linux的帧缓冲设备 帧缓冲&#xff08;framebuffer&#xff09;是 Linux 为显示设备提供的一个接口&#xff0c;把显存抽象后的一种设备&#xff0c;他允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。这种操作是抽象的&#xff0c;统一的。用户不必关心物理显存的…

Linux下没有包含头文件(不知是哪个)导致编译无法通过的解决心得

最近写程序的时候编译出错了&#xff0c;提示信息为&#xff1a;invalid use of undefined type fb_var_screeninfo。显示根据英文知道是没有定义 fb_var_screeninfo这个类型&#xff0c;明显是缺少了某个头文件&#xff0c;但是缺少哪个头文件以及有什么又快又好的解决方法呢&…

gcc编译缺少数学库

Linux下编译出现以下提示可以在编译的后面加上-lm&#xff0c;例如&#xff0c;arm-none-linux-gnueabi-gcc -o example1 example1.c -lm&#xff0c;意思就是添加数学库的意思&#xff0c;编译就能通过了 example1.c:(.text0x3e8): undefined reference to cos example1.c:(.…

Linux编译程序时加-I指定头文件位置

Linux下编译出现以下错误&#xff0c;错误的原因是在/usr/local/arm/arm-2009q3/bin/../arm-none-linux-gnueabi/libc/usr/include/freetype/config/下找不到ftheader.h&#xff0c;而我到该目录下看&#xff0c;发现路径是这样的rootubuntu:/usr/local/arm/arm-2009q3/arm-non…

树莓派远程监控的实现

原文&#xff1a;https://blog.csdn.net/ayz123456/article/details/79252923 http://shumeipai.nxez.com/2016/09/01/raspberry-pi-motion-cameras-for-remote-monitoring.html https://blog.csdn.net/wto882dim/article/details/82195001 https://blog.csdn.net/qq_3950082…

公网访问树莓派

公网访问树莓派控制小车 上篇已经介绍了小车在局域网中的控制方法&#xff0c;比较简单&#xff0c;既然是远程遥控那就要能够进行公网访问&#xff0c;使得你的小车可以在任何有网络的地方都能访问到&#xff0c;并且后续还会加上摄像头&#xff0c;进行实时监控&#xff0c;想…

关于对象的引用作为参数,可以直接访问私有成员的问题

#include using namespace std; class CPoint { public:CPoint(int xx, int yy){x xx;y yy;}CPoint(const CPoint &p){x p.x;y p.y;} private:int x, y; };首先&#xff0c;我们来看一个例子&#xff0c;在CPoint这个类中定义了两个构造函数&#xff0c;第一个为普通的…

僵死进程的产生以及解决办法

本文参考自&#xff1a;https://baike.baidu.com/item/%E5%83%B5%E5%B0%B8%E8%BF%9B%E7%A8%8B/1036577?fraladdin 一个进程在调用exit命令结束自己的生命的时候&#xff0c;其实它并没有真正的被销毁&#xff0c;而是留下一个称为僵尸进程&#xff08;Zombie&#xff09;的数据…

树莓派第一次开机自动连接WIFI(不用显示屏方法)

当我们把树莓派系统镜像烧录到SD卡之后&#xff0c;我们在windows看到的TF卡变成了空间很小的名为boot的盘&#xff0c;我们在此目录下新建一个名为wpa_supplicant.conf空白文件&#xff0c;并在其中加入以下代码: countryGB ctrl_interfaceDIR/var/run/wpa_supplicant GROUPn…

树莓派设置静态IP的好处与坏处

网上后很多资源教初学者如何设置静态IP&#xff0c;但我觉得设置静态IP也有不好的地方&#xff1a; 首先&#xff0c;好处就是树莓派的IP不会变&#xff0c;例如你设置了无线连接方式的静态IP为192.168.1.110&#xff0c;那么无论你连接哪个路由器&#xff0c;或者连接同一个路…

关于源文件用不同的编码方式编写,会导致执行结果不一样的现象及解决方法

如果我们编写以下程序&#xff0c;并分别另存为ANSI和UTF-8两种不同的编码方式保存&#xff0c;放到Linux下编译并运行如下图&#xff0c;两端相同的程序以不同的编码方式保存编译后的运行结果不一样&#xff0c;./ansi采用ANSI编码方式&#xff0c;会自动采用GBK方式来保存中文…

引入宽字符error: converting to execution character set: Invalid or incomplete multibyte or wide character

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 by-sa 版权协议&#xff0c;转载请附上原文出处链接和本声明。 本文链接&#xff1a;https://blog.csdn.net/qq_26093511/article/details/60593240 交叉编译.c文件&#xff0c;遇到如下问题 arm-linux-gcc -o…

linux交叉编译时报错:file not recognized: File format not recognized

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 by-sa 版权协议&#xff0c;转载请附上原文出处链接和本声明。 本文链接&#xff1a;https://blog.csdn.net/u011113596/article/details/80325081 今天交叉编译sqlite3&#xff0c;make的时候报错&#xff1a;…

arm-linux-gcc静态编译和动态编译的区别

很多教程会提到加上-static是静态编译&#xff0c;但对于新手来说没有用例子来说明可能不太好理解&#xff0c;今天我就介绍一下关于这方面知识的一个例子&#xff1a; 最近在做一个关于freetype字体的东西&#xff0c;需要依赖freetype官方提供的库&#xff0c;我已经把电脑这…

从0到1写RT-Thread内核——线程定义及切换的实现

从0写RT-Thread内核之线程定义及切换的实现具体可以分为以下六步来实现 一&#xff1a;分别定义线程栈、线程函数、线程控制块&#xff1b; ALIGN(RT_ALIGN_SIZE)//设置4字节对齐 /* 定义线程栈 */ rt_uint8_t rt_flag1_thread_stack[512]; rt_uint8_t rt_flag2_thread_stack…

从0到1写RT-Thread内核——临界段的保护

临界段就是一段在执行的时候不能被中断的代码段&#xff0c;在RT-Thread里&#xff0c;临界段最常出现的就是对全局变量的操作&#xff08;类似Linux下的锁&#xff09;。RT-Thread对临界段的保护是直接把中断全部关了&#xff0c;NMI FAULT和硬FAULT除外。下图是3个关于中断屏…

从0到1写RT-Thread内核——空闲线程与阻塞延时的实现

在之前写的另外一篇文章——<从0到1写RT-Thread内核——线程定义及切换的实现>中线程体内的延时使用的是软件延时&#xff0c;即还是让CPU空等来达到延时的效果。RTOS中的延时叫阻塞延时&#xff0c;即线程需要延时的时候&#xff0c;线程会放弃CPU的使用权&#xff0c;C…

从0到1写RT-Thread内核——支持多优先级

在本章之前&#xff0c;RT-Thread还没有支持多优先级&#xff0c;我们手动指定了第一个运行的线程&#xff0c;并在此之后三个线程&#xff08;包括空闲线程&#xff09;互相切换&#xff0c;在本章中我们加入优先级的功能&#xff0c;第一个运行的程序是就绪列表里优先级最高的…

Linux串口阻塞与非阻塞

Linux串口编程的阻塞与否可以在open函数中设置&#xff0c;例如&#xff1a; 打开时使用&#xff1a; fd open(USAR1, O_RDWR | O_NOCTTY );//阻塞式读写fd open("/dev/ttyAT2",O_RDWR|O_NOCTTY|O_NDELAY); //非阻塞读写 除了用open函数之外还可以在open函数之…