在linux中使用write系统调用写入数据时出现问题

时间:2014-08-06 10:21:02

标签: c linux linux-kernel operating-system

我已经在linux中编写了读取,写入系统调用的示例代码....执行没有任何问题。

结果,将缓冲区数据存储到文件中....

要存储在文件中的预期结果是Hello World!..但是我将数据放在像这个Hello World这样的文件中!^ @

为了获得预期的结果我还需要做些什么?

int main(int argc , char *argv[])
{
        int fd;
        char buff[14];
        fd = open("myfile.txt",O_CREAT| O_WRONLY,0777);

        if(fd == -1)
        {
                printf("Failed to open the file to write");
                exit(0);
        }

        write(fd,"Hello World!\n",13);
        close(fd);

        fd = open("myfile.txt",O_RDONLY,0777);

        if(fd == -1)
        {
                printf("Failed to open the file to read");
                exit(0);
        }

        read(fd,buff,14);
        buff[14] = '\0';
        close(fd); 
        printf("Buff is %s\n",buff);

        return 0;
}

1 个答案:

答案 0 :(得分:2)

您将buff声明为14个字符,但是您在第15个位置编写了终结符。这导致两个 undefined behavior个实例:一个因为您写出了界限数组的一个,一个是因为当你打印缓冲区时,你在第14位有未初始化的数据。