2011-09-04 28 views
0

我試圖使用系統調用read()和write()。以下程序創建一個文件並將一些數據寫入其中。下面是代碼..在C++中讀寫

int main() 
{ 
    int fd; 
     open("student",O_CREAT,(mode_t)0600); 

    fd=open("student",O_WRONLY); 
    char data[128]="Hi nikhil, How are u?"; 

    write(fd,data,128); 

} 

在上述程序我得到與尺寸128個字節創建的名稱學生一個文件的執行。

int main() 
{ 
    int fd=open("student",O_WRONLY); 
    char data[128]; 
    read(fd,data,128); 
    cout<<(char*)data<<endl; 
} 

但我得到的輸出是垃圾字符....爲什麼這樣呢?

我寫了一個小型閱讀程序來讀取文件中的數據。她是代碼。

但產量

+0

'char data [128]'只聲明一個'char'數組,你不會初始化它,所以不管你有什麼。 – birryree

回答

2

您不檢查read()是否返回錯誤。你應該這樣做,因爲你的問題中的代碼可能就是這種情況。

由於您首先打開文件只寫,因此調用read()會導致錯誤。你應該打開文件來讀取,而不是:

char data[128]; 
int fd = open("student", O_RDONLY); 
if (fd != -1) { 
    if (read(fd, data, sizeof(data)) != -1) { 
     // Process data... 
    } 
    close(fd); 
} 
+0

謝謝你...錯誤是我打開它在寫模式...非常感謝.. – nikhil

4

從您在O_WRONLY模式已經打開的文件不要read

請你幫個忙,並經常檢查的IO功能返回值。

您還應該始終close文件描述符你已經(成功)open版。這樣的小代碼可能無關緊要,但是如果你習慣於忘記這些,你最終會編寫泄漏文件描述符的代碼,這是一件壞事。

0

那麼,首先的事情之一是,你的數據不是128字節。你的數據是字符串:「Hi nikhil,你好嗎?」,它少於128字節。但是,您正在將128個字節從數組寫入文件。初始字符串後面的所有內容都是內存中的隨機垃圾,因爲字符數組只是使用21個字節的數據進行初始化。所以接下來的107個字節是垃圾。