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.pswp.cn/news/384540.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/384540.shtml
英文地址,請注明出處:http://en.pswp.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函數之…