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

Posted

技术标签:

【中文标题】在linux中使用write系统调用写入数据时出现问题【英文标题】:Issue while writting the data using write system call in linux 【发布时间】:2014-08-06 10:21:01 【问题描述】:

我已经编写了用于在 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;

【问题讨论】:

buff[14] = '\0'; --> buff[13] = '\0'; 您是否进行了任何重新编译或重建? 【参考方案1】:

您声明 buff 为 14 个字符,但您在位置 15 处写入终止符。这导致 两个 undefined behavior 实例:一个是因为您写入超出数组范围,一个是因为当您打印缓冲区时,您在位置 14 处有未初始化的数据。

【讨论】:

以上是关于在linux中使用write系统调用写入数据时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

linux中unzip命令解压时出现write error (disk full?). Continue?错误

数据流:使用 BigQueryIO 写入时出现 SocketTimeoutException

将小 PySpark DataFrame 写入镶木地板时出现内存错误

使用CsvHelper写入数据时出现异常

音频录制和播放环回缓冲区问题,将数据写入音轨时出现问题

将 Pyspark DataFrame 写入 Parquet 时出现 Py4JJavaError