關於linux和win下的檔案操作函式小問題

2021-09-26 14:58:41 字數 1446 閱讀 7211

在clion中進行c++檔案操作的時候發現,沒有direct.hio.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 二...