双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

初学者关于多线程写文件的问题

sayaza sayaza 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
初学多线程,写一个小程序想以多线程复制文件,但是不行,请教原因。


#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <winbase.h>
#include <process.h>
#include <sys/types.h>
#include <sys/stat.h>

typedef struct
{
FILE *filein;
FILE *fileout;
int pos;
int size;
}
PARAMS,*PPARAMS;

void copythread(PVOID pvoid);
CRITICAL_SECTION cs;

int main(void)
{
int i,ret;
int filesize,partsize,position,redundant;
FILE *input,*output;
struct _stat statbuf;
static PARAMS params;
unsigned long hthread;



input=fopen("aaa.txt","rb");
if(input==NULL)
return 1;

output=fopen("bbb.txt","wb");
if(input==NULL)
return 1;

ret=_fstat(_fileno(input),&statbuf);
if(ret!=0)
return 1;

filesize=statbuf.st_size;
partsize=filesize/5;
redundant=filesize%5;

InitializeCriticalSection(&cs);
for(i=0;i<5;i++)
{

position=partsize*i;
params.filein=input;
params.fileout=output;
params.pos=position;
if(i==4)
params.size=partsize+redundant;
else
params.size=partsize;

hthread=_beginthread(copythread,0,¶ms);
}

DeleteCriticalSection(&cs);
fclose(input);
fclose(output);

return 0;
}


void copythread(PVOID pvoid)
{
volatile PPARAMS pparams;
char *buf;
int pos,size,ret;
FILE *input,*output;


EnterCriticalSection(&cs);
pparams=(PPARAMS)pvoid;


size=pparams->size;
pos=pparams->pos;
input=pparams->filein;
output=pparams->fileout;
LeaveCriticalSection(&cs);

buf=(char *)malloc(size);
memset(buf,0,sizeof(buf));

ret=fseek(output,pos,SEEK_SET);

fread(buf,size,1,input);
fwrite(buf,size,1,output);


free(buf);
_endthread();
}

...全文

相关推荐

评论 6
收藏 已收藏
分享
返回顶部
sayaza
C语言 70,039 成员 243,237 内容