免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4244 | 回复: 4
打印 上一主题 下一主题

[问]open开O_DIRECT标志位,调用write出错. [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-15 12:15 |只看该作者 |倒序浏览
  1. #include <stdio.h
  2. #include <sys/time.h>
  3. #include <fcntl.h>
  4. #include <unistd.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <malloc.h>

  8. int main()
  9. {
  10.       char *buf = NULL;
  11.       int fd = -1, ret = -10;
  12.       buf = valloc(4100);
  13.       printf("buf address = %p\n", buf);

  14.       buf = "12345\n";
  15.       printf("the buf is:%s\n",buf);
  16.   
  17.       fd = open("/home/zhangqi/deadfish.txt", O_RDWR | O_DIRECT | O_CREAT);
  18.   
  19.       if (fd<0){
  20.           printf("Cannot open file\n");
  21.           exit(1);
  22.       }
  23.   
  24.       printf("fd = %d\n",fd);
  25.   
  26.       ret = write(fd, buf, 4096);
  27.       if (ret < 4096)
  28.           printf("write error!\n");
  29.   
  30.       printf("after write...\nret = %d\n",ret);

  31.       free(buf);
  32.       close(fd);
  33.       return 0;
  34. }
复制代码
运行的结果是:
  1. buf address = 0x804b000
  2. the buf is:12345

  3. fd = 3
  4. write error!
  5. after write...
  6. ret = -1
  7. Segmentation fault
复制代码
大伙帮忙看看。
要写的文件是生成了,但是内容没有写进去。。。

论坛徽章:
0
2 [报告]
发表于 2010-09-15 13:09 |只看该作者
buf = valloc(4100);
      printf("buf address = %p\n", buf);

      buf = "12345\n";
      printf("the buf is:%s\n",buf);

这个是什么东西呀,你在哪见过这样设置的buf的么??

buf = "12345\n";后, buf的长度只有7了,你valloc的已经被你扔掉了。

你再去好好学习一下指针与数组哈。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
3 [报告]
发表于 2010-09-15 13:45 |只看该作者
#       buf = valloc(4100);
#       printf("buf address = %p\n", buf);
#

#       buf = "12345\n";

这样的代码,你确定那个字符串写入到你申请的那块内存了吗?:wink:

论坛徽章:
0
4 [报告]
发表于 2010-09-15 13:45 |只看该作者
buf = valloc(4100);
      printf("buf address = %p\n", buf);

      buf = "12345\n";
      print ...
mekinglong 发表于 2010-09-15 13:09


搞定,您说的很对。

论坛徽章:
0
5 [报告]
发表于 2010-09-15 13:46 |只看该作者
这样的代码,你确定那个字符串写入到你申请的那块内存了吗?
Godbach 发表于 2010-09-15 13:45


是的是的,稀里糊涂了。谢谢您。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP