初学者关于多线程写文件的问题
初学多线程,写一个小程序想以多线程复制文件,但是不行,请教原因。
#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();
}