-2
這裏是下面的代碼片段,我不知道爲什麼這不工作文件沒有使用正確關閉fcntl.h接近
但輸出我得到的是
-1
-1
代碼
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <ctime>
int main()
{
int fd = open("/home/felipe/gdelt/fixed/test.bin", O_APPEND|O_WRONLY|O_CREAT);
std::cout<<close(fd)<<std::endl;
fd = open("/home/felipe/gdelt/fixed/test.bin", O_APPEND|O_WRONLY|O_CREAT);
std::cout<<fd<<std::endl;
//testWrite();
return 0;
}
修改後的代碼(添加模式是使其工作的原因)
int main()
{
int fd = open("/home/felipe/gdelt/fixed/test.bin", O_APPEND|O_WRONLY|O_CREAT,S_IWUSR);
std::cout<<close(fd)<<std::endl;
fd = open("/home/felipe/gdelt/fixed/test.bin", O_APPEND|O_WRONLY|O_CREAT,S_IWUSR);
std::cout<<fd<<std::endl;
//testWrite();
return 0;
}
如果指定了'O_CREAT',則必須向'open()'提供第三個參數。忽略它會導致未定義的行爲(也許該函數從堆棧讀取垃圾值,並且它無法對其讀取的任何無意義的任意值執行任何操作。) –
正如代碼所示,打開失敗...所以當然嘗試關閉fd -1將失敗。 – vanza
在關閉文件之前,在單獨的打印操作('std :: cout << fd <<'\ n';')中打印'fd'。和/或打印'errno'或'strerror(errno)'。在C++代碼上看到C標籤也很奇怪,並且很奇怪它正在被編譯而沒有包含'' - 可能是某種東西,或許是'',它正在爲你包括它。 –