用c ++读写

时间:2011-09-04 07:16:45

标签: c++

我正在尝试使用系统调用read()和write()。以下程序创建一个文件并将一些数据写入其中。这是代码..

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);

}

执行上述程序后,我得到了一个名为student的文件,其大小为128字节。

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

但我得到的输出是垃圾字符......为什么会这样呢?

我写了一个小的读程序来读取文件中的数据。她是代码。

但输出

3 个答案:

答案 0 :(得分:4)

请勿在{{1​​}}模式下打开的文件中read

帮自己一个忙,总是检查IO功能的返回值

您还应始终O_WRONLY文件描述符(已成功)close。对于像这样的琐碎代码可能无关紧要,但是如果你养成忘记它的习惯,你最终会编写泄漏文件描述符的代码,这是件坏事。

答案 1 :(得分: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);
}

答案 2 :(得分:0)

嗯,首先是你的数据不是128字节。你的数据是字符串:“嗨nikhil,你好吗?”,这是小于128字节的方式。但是你要从数组写入128个字节到文件中。初始字符串之后的所有内容都将是内存中的随机垃圾,因为char数组仅使用21个字节的数据进行初始化。所以下一个107字节是垃圾。