在clion中進行c++檔案操作的時候發現,沒有direct.h和io.h這兩個標頭檔案。
無法包含標頭檔案,兩個原因:要麼就是包含路徑不對,但是如果是系統檔案,路徑不應該有問題;那麼就是另外乙個原因,系統裡就不應該有這個標頭檔案,而是用別的方法實現的。
網上提供的大部分方法就是find + locate + cp,這種方法可能帶來更多的問題,盡量不去手動操作我的系統檔案。知戶上這個回答我比較認可,linux下應該是沒有這個標頭檔案的,而且這個io.h應該也不是標準庫。
跟 #include ,只是標頭檔案換成了 io.h, 這裡用#include 而不是#include 「io.h」 說明io.h在編譯器的預設搜尋路徑,而不在使用這個#include的檔案的工程路徑跟stdio.h不一樣, 這個io.h不是標準c的標頭檔案。我程式內用到direct.h的地方主要是mkdir和_access兩處:
在win和linux下使用mkdir函式需要包含不同的標頭檔案,注意出入引數的區別。
/ /windows下 _mkdir 函式
#includeint _mkdir( const char *dirname );
// linux下 mkdir 函式
#include int mkdir(const char *path, mode_t mode);
// 注意輸入輸出,詳見官方文件
在win下和linux下的_access方法也不是同乙個標頭檔案,可以利用巨集定**決相容問題,也可以直接利用不同系統下的函式。
// windows:
stdio.h , io.h
檔案訪問: _access
檔案刪除: remove
// linux:
stdio.h , unistd.h
檔案訪問: access
檔案刪除: remove
由於不同系統下的函式可能輸入輸出稍有不同,如果不是特別苛求跨平台,那麼還是直接用相應系統的函式比較方便。
畢竟為了跨平台,可能很多用到以上函式的地方都需要判斷系統型別,多出很多任務作量。
#if defined(_win32) || defined(_win64)
// windows header
// windows api
#else
// linux header
// linux api
#endif
總結一下,能用系統自帶就用系統自帶,能不動系統檔案就不動,否則後患無窮。 關於linux下的 a檔案與 so 檔案
描述問題 使用多執行緒pthread的時候,我用的ide,codebolcks 編譯後發現直接彈出視窗,程式還沒有被build。巴拉巴拉,然後陷入了這個迴圈。提示有一句pthead create未定義。發現 pthread要用到動態鏈結庫 libpthread.a 才能使用。解決辦法 後來在sett...
關於linux和win系統遇到的問題
今天在專案發版本時,遇到了這個問題 程式是多個版本一直迭代,用的是資料夾作版本號,寫sql指令碼放在資料夾,系統啟動執行,有些指令碼前後順序有要求。在乙個建表和查詢的指令碼的順序執行過程中,由於順序錯誤導致指令碼執行不到,資料庫版本公升級不上。在困擾多時,才想起可能是linux 和 win系統中,檔...
redis 的環境搭建 (win和linux下)
一 windows下的安裝 這時候,就已經完成配置了。測試一下 這時候需要啟另乙個cmd視窗,原來的不要關閉,不然就無法訪問服務端。切換到redis目錄下執行 redis cli.exe h 127.0.0.1 p 6379 傳入鍵值對 set mykey abc 取出鍵值對 get mykey 二...