ARM开发板上跑如下测试程序的时候会概率性出现“Write Failed Bad address”:

/* Write test */
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>int main(int argc,char* argv[]){int i = 0;int w_rw = 0;int fd = -1;int bw = -1;int nob = 0;char* file_name = "testfile";char buff[30] = "Testing";w_rw = 1;       // 1 - write , 2 - rewritenob = 1024;  // No of bytes to writefor(i = 0; i < w_rw; i++){if((fd = open(file_name,O_CREAT | O_RDWR))< 0){perror("Open failed!");return -1;}printf("fd:%d",fd);if((bw = write(fd,buff,nob)) < 0){perror("Write failed!");return -1;}printf("\n Bytes written : %d \n",bw);}return 0;
}

尝试跟踪代码一直找不到具体原因,于是查看write()函数的man手册,该函数的说明如下:

函数定义:ssize_t write (int fd, const void * buf, size_t count);
函数说明:write()会把参数buf所指的内存写入count个字节到参数fd所指的文件内。
返回值:如果成功write()会返回实际写入的字节数(len)。当有错误发生时则返回-1,错误代码存入errno中。

这里从buf里面写入fd文件的字节是由count决定的,而不是buf的实际分配内存决定。这样就存在一种访问无效地址(Bad address)的情况:如果count的值大于buf的实际分配内存大小,write()函数就有可能尝试访问超出buf实际内存空间的无效地址。

上述测试代码的问题是buf比较小,只有30字节,write()试图写的是1024字节,这样就会概率性访问到无效地址。只需要修改如下代码即可解决该问题:

        if((bw = write(fd,buff,sizeof(buf))) < 0){perror("Write failed!");return -1;}

C语言之write()函数解析:Write Failed Bad address相关推荐

  1. R语言:rep函数解析

    函数形式:rep(x, time = , length = , each = ,) 参数说明: x:代表的是你要进行复制的对象,可以是一个向量或者是一个因子. times:代表的是复制的次数,只能为正 ...

  2. R语言:paste函数解析

    paste函数 paste (..., sep = " ", collapse = NULL) paste0(..., collapse = NULL) 参数说明: ... - 表 ...

  3. c++ _int64转字符串_C语言 仿JS的eval函数 解析字符串

    C语言 利用后缀表达式解析字符串(符合c98标准,很容易移植到计算器上) 最近用98标准的C语言写了个解析字符串,类似于JavaScript中的eval函数,感觉挺实用(移植到了计算器上,可以画F(X ...

  4. C语言sprintf函数解析(实现数据类型转换到字符串)

    最近在将int转为char*字符串上出了问题,最后使用sprintf函数解决, 使用实例: char *char_num; int recv_num=-123456:sprintf(char_num, ...

  5. 【C语言】自定义函数例题解析

    C语言函数例题解析 C语言函数解析 C语言函数例题解析 值传递 自定义函数求解一元二次方程 自定义函数计算给定日期是该年的第几天 地址传递 自定义函数对N个数排序 自定义函数对字符串的处理 值传递 自 ...

  6. C语言rand()函数解析

    C语言的rand()函数位于<stdlib.h>.该函数可以生成一个取值为0-32767的伪随机数.先看一下函数的实现. unsigned long int next = 1;int ra ...

  7. C语言实现json文本解析

    C语言实现json文本解析 背景 总体方法 实现源码 相关资料 背景 项目中,有时需要根据外部输入条件,进行程序的灵活切换,运用JSON文件解析,能高效的替换指令行输入,且直观易懂. 总体方法 JSO ...

  8. C语言关于static的解析

    C语言关于static的解析 #include<stdio.h> static int j; void fun1(void) { int i = 0; i ++; } void fun2( ...

  9. main() 函数解析(一)——Linux-0.11 剖析笔记(六)

    文章目录 1. 宏定义`_syscall0` 2. `setup.s`读取的参数 3. 读取CMOS实时时钟信息 3.1 `outb_p(value,port)` 3.2 `inb_p(port)` ...

最新文章

  1. .NET使用OpenSSL生成的pem密钥文件[1024位]
  2. maven 打包时缺少文件_解决Intellij Idea下使用Maven项目打包时部分文件缺失问题
  3. 【神经网络八股扩展】:数据增强
  4. 三年亏了近50亿,网易云音乐终于熬到上市了
  5. C语言 pthread_cancelpthread_detach
  6. 空循环和无穷循环的区别
  7. ssh: connect to host port 22: Connection refused
  8. Eclipse下载与安装
  9. Android集成LAME库,实现pcm转mp3
  10. 如何解决Word只能用安全模式打开
  11. 一图抵千言《ARouter简明扼要原理分析》
  12. 云计算技术的概念、原理
  13. MQTT连接阿里云物联网平台步骤
  14. linux作业管理系统pbs,集群上作业提交系统LSF和PBS的使用与简介
  15. 【实用工具系列之爬虫】python实现爬取代理IP(防 ‘反爬虫’)
  16. 【UE4 第一人称射击游戏】12-全自动步枪并显示剩余弹药量
  17. 解决32位Eclipse和64位Eclipse在64位win7系统上运行问题
  18. 第二次作业:《国际贸易学》—自由贸易理论
  19. HTML设置背景图片是否重复
  20. 12.30重大消息快递

热门文章

  1. 多视图多示例多标签的协同矩阵分解
  2. 使用gdebi去解决安装deb包的时候软件依赖问题
  3. 温故而知新:北桥和南桥
  4. ubuntu占用空间清理
  5. 人与计算机进行交互的接口,5种新型人机交互技术
  6. 小米应用市场ASO关键词设置
  7. Xshell实现Windows上传文件到Linux主机的方法
  8. jude(java建模软件)_JUDE(JAVA建模软件)下载
  9. 支付户+存管户基本解释
  10. 黑帽SEO的常见操作手法解析