1. 程式人生 > >關於qt在linux下使用open,write,close等檔案操作的筆記

關於qt在linux下使用open,write,close等檔案操作的筆記

在看一些例程的時候發現 ,linux下qt使用檔案操作的時候跟用c語言編寫的函式不一樣

linux下在qt中使用open

#include <fcntl.h>

fd = ::open(“path”,O_RDWR|O_NONBLOCK);

linux下在c中使用open

#include <fcntl.h>

fd = open(“path”,O_RDWR|O_NONBLOCK);

這是為什麼呢?

還有如果想關閉剛才開啟的fd 要使用close(fd)函式。但是qt下close()是關閉當前QWidget。

於是在我就去找了度娘,度娘不負我啊啊 啊啊 。找到了這樣的解釋:::

為了區分成員函式與全域性函式,就要在全域性函式前面增加"::"雙冒號的標誌。

這樣就沒有什麼疑問了吧歐了。!!!

//度娘 搜到的 ^_^ 別人部落格裡的東東奧

錯誤原因是QWidget::close()與stdio.h中的檔案關閉標準函式close()產生了歧義。所以可以參考下文連結中的解決方案。

http://bytes.com/topic/c/answers/856501-use-close-int-unistd-h-qt

另,林銳的《高質量C/C++程式設計》v1.0 p58,關於全域性函式和類成員函式同名時,如何在類中使用全域性函式的說明:
不論兩個 Print 函式的引數是否不同,如果類的某個成員函式要呼叫全域性函式 Print,為了與成員函式 Print 區別,全域性函式被呼叫時應加‘::’標誌。如
  ::Print(...);// 表示 Print 是全域性函式而非成員函式