免费注册 查看新帖 |

Chinaunix

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

求助啊 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-08 13:18 |只看该作者 |倒序浏览
问题这样的:
   

   将会有很多进程反问文件a.txt,打开后向其中写数据,要求在文件后面追加,
   不知道问什么老实会把原来有的内容给覆盖掉呢??


   我是这这样写的;
    fp=fopen(a.txt,"a")
    if(fp==NULL)
   {
       return -1;
   }
   else
   {
         fprintf(fp,"%s\n","aaa");
         fclose(fp);
     }

    很多进程将执行上述代码  ,结果发现文件终只有一行数据
  ???????????

论坛徽章:
0
2 [报告]
发表于 2007-08-08 13:23 |只看该作者
能用C++的话用C++的标准IO吧。比这个好用。

#include <fstream>

fstream的追加参数比较干净一些。

参数:
ios::app // 从后面添加

ios::ate // 打开并找到文件尾

ios::binary // 二进制模式 I/O (与文本模式相对)

ios::in // 只读打开

ios::out // 写打开

ios::trunc // 将文件截为 0 长度


ofstream file("a.txt", ios::app);
file << "aaa";


好像不符合题意,貌似是C++布道者的感觉。。。。。。

[ 本帖最后由 leeon868 于 2007-8-8 13:31 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2007-08-08 13:39 |只看该作者
系统是用C语言的,没有办法啊 ,请高手指点以下

论坛徽章:
0
4 [报告]
发表于 2007-08-08 13:50 |只看该作者
要对操作文件加锁,好多进程同时操作文件,文件就乱套了.

论坛徽章:
0
5 [报告]
发表于 2007-08-08 13:50 |只看该作者
because the other processes didnt know the file had been changed
try this way:
process1{fopen, fwrite, fclose}-->process2{fopen, fwrite, fclose}......


  1. pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
  2. int status = pthread_mutex_lock (&mutex);
  3. if (status != 0)
  4.     perror("pthread_mutex_lock");

  5.   fp=fopen(a.txt,"a")
  6.     if(fp==NULL)
  7.    {
  8.        return -1;
  9.    }
  10.    else
  11.    {
  12.          fprintf(fp,"%s\n","aaa");
  13.          fclose(fp);
  14.      }
  15. status = pthread_mutex_unlock (&mutex);
  16. if (status != 0)
  17.     perror("pthread_mutex_unlock");
复制代码

论坛徽章:
0
6 [报告]
发表于 2007-08-08 13:56 |只看该作者
能否提供一段正确的代码??

论坛徽章:
0
7 [报告]
发表于 2007-08-08 13:56 |只看该作者
fflush一下

论坛徽章:
0
8 [报告]
发表于 2007-08-08 13:59 |只看该作者
麻烦大家能否说的详细以下,谢谢了

论坛徽章:
0
9 [报告]
发表于 2007-08-08 14:06 |只看该作者
5楼已经给你代码了啊

论坛徽章:
0
10 [报告]
发表于 2008-11-28 20:10 |只看该作者
原帖由 FreeGnu 于 2007-8-8 13:50 发表
because the other processes didnt know the file had been changed
try this way:
process1{fopen, fwrite, fclose}-->process2{fopen, fwrite, fclose}......


pthread_mutex_t mutex = PTHREAD_MUTEX ...


代码不错,谢了,线程中读取同一文件可以用到
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP