免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: ChianXu
打印 上一主题 下一主题

[Linux] fopen函数用”a+“打开的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2012-09-03 08:19 |只看该作者
_Rayx 发表于 2012-09-03 07:59
每次会自动到未尾的。


是的哦。我强制性的把它rewind和fseek都没用。可能内部实现机制就是规定了当“a+”打开的时候就是只能写到末尾。

论坛徽章:
23
双鱼座
日期:2013-08-30 09:25:19辰龙
日期:2014-07-28 11:22:24白羊座
日期:2014-08-26 10:34:1815-16赛季CBA联赛之浙江
日期:2016-03-15 10:51:5415-16赛季CBA联赛之八一
日期:2016-05-31 09:38:3615-16赛季CBA联赛之辽宁
日期:2017-08-31 14:59:2115-16赛季CBA联赛之辽宁
日期:2017-12-06 14:12:3615-16赛季CBA联赛之天津
日期:2019-01-02 15:25:4915-16赛季CBA联赛之深圳
日期:2020-12-06 11:26:21狮子座
日期:2014-05-19 09:16:35技术图书徽章
日期:2014-03-27 13:37:39技术图书徽章
日期:2013-08-30 09:28:52
12 [报告]
发表于 2012-09-03 14:18 |只看该作者
还没注意到过,尝试了下,发现还真是不行:
  1.     FILE *fp;
  2.     int fd;
  3.     int val;

  4.     fp = fopen("./tmp.txt", "a+");
  5.     fd = fileno(fp);
  6.     if (-1 == (val = fcntl(fd, F_GETFL, 0)))
  7.         err_sys_q("fcntl error");
  8.     val &= ~O_APPEND;
  9.     if (-1 == lseek(fd, 0, SEEK_SET))
  10.         err_sys_q("lseek error");
  11.     rewind(fp);
  12.     write(fd, "@", 1);
  13.     fputs("JWF\n", fp);
  14.     fclose(fp);
复制代码
此办法失败

论坛徽章:
0
13 [报告]
发表于 2012-09-04 20:43 |只看该作者
根据你的期望,我不知道你为什么要fopen用“a+” 打开一个文件,如果你想每次调用fread或者fwrite时都是从文件开头,为啥不用fopen的“w”打开文件呢

论坛徽章:
23
双鱼座
日期:2013-08-30 09:25:19辰龙
日期:2014-07-28 11:22:24白羊座
日期:2014-08-26 10:34:1815-16赛季CBA联赛之浙江
日期:2016-03-15 10:51:5415-16赛季CBA联赛之八一
日期:2016-05-31 09:38:3615-16赛季CBA联赛之辽宁
日期:2017-08-31 14:59:2115-16赛季CBA联赛之辽宁
日期:2017-12-06 14:12:3615-16赛季CBA联赛之天津
日期:2019-01-02 15:25:4915-16赛季CBA联赛之深圳
日期:2020-12-06 11:26:21狮子座
日期:2014-05-19 09:16:35技术图书徽章
日期:2014-03-27 13:37:39技术图书徽章
日期:2013-08-30 09:28:52
14 [报告]
发表于 2012-09-06 11:08 |只看该作者
用"r+"打开,然后进行fseek不就可以吗~

论坛徽章:
0
15 [报告]
发表于 2012-09-07 09:25 |只看该作者
vegetable2012 发表于 2012-09-04 20:43
根据你的期望,我不知道你为什么要fopen用“a+” 打开一个文件,如果你想每次调用fread或者fwrite时都是从文 ...


用“w”打开的话会把文件截短成0,我的目的是打开文件后从开头读,不截短,但是写入时也从开头写,覆盖之前的数据。

论坛徽章:
0
16 [报告]
发表于 2012-09-07 09:26 |只看该作者
回复 14# dengxiayehu


    这个不错。哈哈,我怎么就没想到呢。一直想着用w或者a打开。忽略了r+;我去测试一下,3Q;

论坛徽章:
0
17 [报告]
发表于 2012-09-07 12:34 |只看该作者
fopen 的a+ 方式是指以附加方式打开可读写的文件。如果该文件不存在,那么就会新建该文件;如果文件已经存在了,那么写入的数据会被加到文件尾后,即文件原先的内容会被保留。所以会强制性的把写指针指向末尾

论坛徽章:
0
18 [报告]
发表于 2012-09-14 12:05 |只看该作者
fopen(file,'w');
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP