美文网首页
【蜗牛黑板报】write函数和字符串

【蜗牛黑板报】write函数和字符串

作者: 技术是神奇的 | 来源:发表于2020-06-01 20:27 被阅读0次

今天调试项目中,遇到一个crash问题,和字符串末尾多一个\0有关,和write函数有关。

write() :

ssize_t write(int fd,const void*buf,size_t count);

参数说明:

  fd:是文件描述符

  buf:通常是一个字符串,需要写入的字符串

  count:是每次写入的字节数

发生如下crash错误:

007640 0-01 00:04:13.716  2632  2632 F DEBUG  : signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------

007641 01-01 00:04:13.716  2632  2632 F DEBUG  : Abort message: 'FORTIFY: write: prevented 4-byte read from 2-byte buffer'

007642 01-01 00:04:13.716  2632  2632 F DEBUG  :    r0  00000000  r1  0000015e  r2  00000006  r3  00000008

有个关键性的报错提示:“write: prevented 4-byte read from 2-byte buffer'”。

大概可以知道是write函数的错误,错误提示大概意思 “阻止从2字节缓冲区读取4字节”

错误代码:

char buf[16];  // buf占有16个字节!!

int fd = open("xxx", O_WRONLY)

1. write(fd, "0", 4);

//以上crash就是这句话的错误,“0”占有2个字节(因为“”里面还有个‘\0’),后面4代表写入4字节,那往2个字节的缓存放4字节数据,导致内存泄露,所以直接crash了。(简单说,“0”只有2个字节数据怎么往文件写4字节?)

2. sprintf(buf, "%d", 255);

//这句话,只是把255存到buf中,没问题

   write(fd, buf, 4); 

//buf占有16个字节,往16字节的缓存存放4个字节数据,这是正确的

解决方法:减少写入的字节

write(fd, "0", 1); // 从写入4字节改为写入2字节或者1字节就可以了


后言:读书时很早就知道字符串末尾多一个‘\0’,那时也就记住了,知道这回事。若没有实际使用,还是不行啊。

书读百遍,其义也不会自现,要靠实践。

相关文章

  • 【蜗牛黑板报】write函数和字符串

    今天调试项目中,遇到一个crash问题,和字符串末尾多一个\0有关,和write函数有关。 write() : s...

  • twisted之RFID数据传输整理

    一. 发送相关: self.transport.write()函数只能发送字符串类型的参数!!! RFID只接收字...

  • python3读/写文件,读csv

    用Python 内构函数open来写入字符串到txt文件里 读csv,逗号分隔符 主要有read和write两个...

  • write()函数

    IO写入的基本过程a. 定位用户数据b. 将用户数据拷贝至内核中(page cache) 先解释一下page ca...

  • R语言写入文件2021.2.24

    1、写入文件 使用write函数或者cat函数。cat函数:直接抓取数据显示在代码框中。write函数:file指...

  • AX 如何处理关闭form的操作

    如果不想保存该行就关闭可以overide这个write 和 valiated write 的函数只有在close ...

  • Elisp一天一函数——write-region

    函数名称:write-region 函数功能一句话描述:将某个region的文本、或某个字符串写入到指定文件中。 ...

  • 写入文件

    定义 写入文件就是把在R上的文件保存到电脑里,使用write函数 write函数

  • 7.14

    函数一 定义 if(1 > 0){document.write('a');document.write('b');...

  • mysql函数

    字符串函数 合并字符串函数CONCAT()和CONCAT_WS 1. CONCAT() 函数定义为:CONCAT(...

网友评论

      本文标题:【蜗牛黑板报】write函数和字符串

      本文链接:https://www.haomeiwen.com/subject/pxguzhtx.html