linux多线程写同一个文件,Linux 多线程文件读写操作 +实例

#include#include#include#include#include#include#include#defineMAX 256     /* 邮箱大小*/#defineSIZE 99        /*每次读取长度范围 小于邮箱大小*/charcBuff[MAX];/*邮箱*/intiHead;/*头指针*/intiTail;/*尾指针*/intjiangmq_read(constchar*w_path)

{

FILE*w_fp;intsizen;/*实际读入的大小*/if(NULL==(w_fp=fopen(w_path ,"r")))

{

printf("error: Can not open %s .\n",w_path);

pthread_exit((void*)1);

}while(1)

{/*判断邮箱是否已写满了*/if((iTail(iHead-SIZE)))

{continue;

}/*读取数据到邮箱中*/if((sizen=fread(cBuff+iTail,1,SIZE,w_fp))==0)

{while(1)

{if(iHead==iTail)

{

fclose(w_fp);

pthread_exit((void*)1);

}

}

}/*写完一次邮箱 移动尾指针*/iTail+=sizen;/*再次判断邮箱是否 将要 写满*/while((iHead==(iTail+sizen))||(((MAX-iTail)

{

iTail=0;

}

}

}intjiangmq_write(constchar*r_path)

{

FILE*fp;intsizen;/*实际读取的大小*/inttmp ;/*标示实际要读取内容的大小*/if(NULL==(fp=fopen(r_path ,"w")))

{

printf("error: Can not open %s.\n",r_path);

pthread_exit((void*)1);

}

pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);while(1)

{/*判断邮箱是否为空*/if((iHead==iTail) )

{continue;

}

tmp=SIZE;/*当邮箱中可读内容不足标准大小*/if((iTail>iHead)&&((iTail-SIZE)

{

p=iTail-iHead;

}/*把邮箱中内容写入文件中*/if((sizen=fwrite(cBuff+iHead,1, tmp,fp))<0)

{

fclose(fp);

pthread_exit((void*)2);

}/*读完邮箱一次 移动头指针*/iHead+=sizen ;/*判断是否到邮箱尾部*/if(iHead>(MAX-SIZE))

{while(iTail==iHead){}

iHead=0;

}

}

}intmain(intargc ,char*argv[])

{int*value_ptr;

pthread_t wtid,rtid;/*初始化头尾指针*/iHead=0;

iTail=0;if(argc!=3)

{

printf("error:please input two files name.\n");return-1;

}if(pthread_create(&rtid,NULL,(void*)jiangmq_write,argv[2])!=0)

{

printf("error: Can not create jiangmq_write.\n");return-2;

}if(pthread_create(&wtid,NULL,(void*)jiangmq_read,argv[1])!=0)

{

printf("error: Can not create jiangmq_read.\n");return-2;

}/*等待线程读入结束*/pthread_join(wtid,(void**)&value_ptr);/*终止写出线程*/pthread_cancel(rtid);

printf("over \n");return0;

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值