2011-09-04 71 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个字节是垃圾。