Linux的目录结构和头文件相关;哪里找- sys/types.h, sys/stat.h
KEYWORD : sys/types.h; sys/stat.h; linux; 頭文件;reserve place; reserve place
2018/Apr/01 更新:
??關于 sys/***.h 的頭文件,在不同平臺上通過建立軟連接的方式可以解決。
??建立軟連接的方式可以參考本人的這篇blog ===> 獲得(讀取)一個文件內的所有數據的字節總數 <=== 這個鏈接中的 ?<h3>其中 和系統有關的 頭文件需要做處理:</h3> ?即是找到 sys/×××.h 頭文件,并且創建軟連接的方式。
??在查看各種編程書,源代碼的時候,個人經常遇到對源代碼引用的頭文件的困惑。
??比如,對于 #include <stdio.h>; #include <stdlib.h>; #include <string.h>; 這種常見的頭文件不以為然,自然如果編譯的工具(鏈)沒有問題,也就不會存在找不到頭文件的情況。
??但是,如果遇到 #include <unistd.h> ;#include <fcntl.h> 這樣的頭文件就要想一想了,因為對于一個沒怎么接觸系統編程的人來說,實在是不熟悉這些頭文件。
??要是再遇到這樣的頭文件: #include <sys/stat.h>; #include <sys/types.h>; 這樣的頭文件更是容易出問題,因為 sys 目錄下的頭文件并未這么簡單寫就可以了。
??那么,其實問題也很簡單,到底linux下這些頭文件都在哪里?
??相信用linux 編程的同學們都是通過 GNU 工具鏈來編譯鏈接源代碼的。
??比如 gcc helloworld.c -o helloworld 像這樣的命令應該是比較熟悉了。
??這種情況下,明明 helloworld.c 中是有 #include <stdio.h> 這個頭文件的,而在編譯鏈接命令中并沒有體現出使用這個頭文件的樣子嘛…..
Linux的目錄結構
根目錄:
??這一點要和linux 系統本身的目錄結構有關系,我們知道使用 linux 一般來說是不會去關注磁盤分區的,所有的內容都在 "/" 這一 root 根目錄下,
用戶目錄:
??比如我們用戶最直接使用的,就是 /home/username/ 這一目錄,它就是在根目錄 "/" 下的 "home" 文件夾,而home文件夾下就是根據linux上可以有多個用戶這個特點,按用戶名,分為多個文件夾。如果你是 user1,那你就分的目錄"/home/user1/", 這時候,我們還可以發現在 “/home/user1/” 這個目錄下,系統自動分配了 “Documents/”; “Music/”; “Downloads/”; …等等這類普通常用的文件夾。
??到目前為止我舉了一個 /home/ 的例子,簡單說明了一下我想說的 linux 不分區的目錄結構,
可執行二進制文件:
??在 linux 下工作,那就不得不提命令command這個神奇的東西了,說幾個常用的命令: ls, mkdir, rm, grep, ps… 這些命令,都被放在了根目錄"/" 的 “bin/” 目錄下, 也就是 “/bin/” ;可以使用 $ls /bin <- 這個命令查看一下。
??以上說了這些,是為了對 linux 的這種目錄結構產生一個感性的認識。
應用程序:
??那么同樣,根目錄 "/" 它也為所有的應用程序有關的單獨分配了一個文件夾,那就是 “usr/” 文件夾。通過 $cd /usr 可以到達該目錄下。
用戶安裝程序:
??之所以說”為應用程序有關“,那是因為這個目錄下不單單只保存應用程序。我們通過命令#apt-get install application 安裝的應用程序,幾乎都是安裝在 “/usr/share/” 這個目錄下,使用 $ls /usr/share/ 命令可以看到許多”文件夾“,其文件夾名對應的就是應用名。
用戶(程序員)編寫程序:
??通過命令 $cd /usr 到達該目錄下, $ls -CF 可以看到 “/usr/” 目錄下的文件夾和文件,注意到有 “include/” 這個文件夾,這個文件夾就是這篇文件要介紹的重點了,他就是 linux 下,GNU 編譯鏈接的 C標準庫 和 系統調用 的所有 頭文件的集合。
??通過 /usr$cd include 就可以進入到這個目錄下了,
??然后馬上執行 /usr/include$ls -CF 來看看這個文件夾下都放了什么…… 可以看到 stdio.h; stdlib.h; string.h… 等等這些熟悉頭文件都在,等等,那前面說的 “sys/stat.h; sys/tpyes.h” 這類頭文件在哪里?
??這就跟平臺有關系了,以Ubuntu為例,在/usr/include/ 目錄下,可以看到 “x86_64-linux-gnu/” 這個目錄,其實 “sys/” 這個目錄相關的頭文件都在這下面
> 當然,不同的計算機不同,你有可能看到的是 “x386-linux-gnu/”
(↑可能寫的不太準確,自己沒有32位的電腦,網上看到路徑,記不太清了);
> 在樹莓派上,你看到的將會是“arm-linux-gnuea…/” 這個目錄;
> 而在 cygwin on windows,就是直接的“sys/” 目錄!
??到目前為止,你應該是都知道說需要的 ISO C 和 POSIX 等 提供的 頭文件到哪里去尋找了,
??如果在看書、看代碼看到一個不熟悉的 頭文件,不清楚自己電腦上有沒有…這個時候使用命令↓
$find /usr/include/[theHeadfileName].h
??如果有正確的輸出,就可以知道我們可以大膽地將“[theHeadfileName].h” 這個頭文件包含在代碼中了。
2018/Jan/09 新增:
對 GNU 編譯器 和 C標準庫(包括其它庫)的新了解
?? 在學習交叉編譯的時候,新了解到了一些跟編譯工具鏈有關的知識(內容), 所以對博客做一次更新(補充)
?? Mint LINUX 環境
?? 安裝 主機(本機)編譯工具鏈
?? 查看gcc 編譯工具信息(的命令)
???? cpp -V $>/dev/null
顯示的信息
?? (個人理解(解釋)補充)
———— END 新增 —————————–
??在學習 linux 上實現 一個 daemon 程序時,看到的幾個不熟悉的頭文件,所以寫了這篇 -> 怎么確定自己的編譯環境有沒有支持該頭文件,把本人測試、修改過的 daemon 程序傳到了CSDN資源中了,有興趣的同學可以下載看看。
”
“一個可以在Cygwin on windows 和 Raspberry Pi 上 $make 通過的簡單 daemon 例程
the end
總結
以上是生活随笔為你收集整理的Linux的目录结构和头文件相关;哪里找- sys/types.h, sys/stat.h的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: exec函数介绍(整理)(附带:操作系统
- 下一篇: 对typedef void (*sigh