1.使用创建两个线程,一个线程拷贝文件的前一部分,另一个线程拷贝文件的后一部分
#include <25061head.h>
char filename[128];
char myfile1[128];
char myfile2[128];
void *callback1(void* arg)
{
int fd_r=open(filename,O_RDONLY);
if(fd_r<0)
{
ERR_MSG("open filename error");
}
off_t size=lseek(fd_r,0,SEEK_END);
if(size==-1)
{
close(fd_r);
ERR_MSG("lseek error");
}
umask(0);
int fd_w1=open(myfile1,O_WRONLY|O_CREAT|O_TRUNC,0644);
{
if(fd_w1<0)
{
close(fd_r);
ERR_MSG("open myfile1 error");
}
}
lseek(fd_r,0,SEEK_SET);
lseek(fd_w1,0,SEEK_SET);
char buf[4096];
for(int i=0;i<size/2;i++)
{
if(1>read(fd_r,buf,1))
{
break;
}
write(fd_w1,buf,1);
}
printf("前半部分拷贝完成\n");
close(fd_r);
close(fd_w1);
return NULL;
}
void *callback2(void* arg)
{
int fd_r=open(filename,O_RDONLY);
if(fd_r<0)
{
ERR_MSG("open filename error");
}
off_t size=lseek(fd_r,0,SEEK_END);
if(size==-1)
{
close(fd_r);
ERR_MSG("lseek error");
}
umask(0);
int fd_w2=open(myfile2,O_WRONLY|O_CREAT|O_TRUNC,0644);
{
if(fd_w2<0)
{
close(fd_r);
ERR_MSG("open myfile2 error");
}
}
lseek(fd_r,size/2,SEEK_SET);
lseek(fd_w2,size/2,SEEK_SET);
char buf[4096];
for(int i=size/2;i<size;i++)
{
if(1>read(fd_r,buf,1))
{
break;
}
write(fd_w2,buf,1);
}
printf("后半部分拷贝完成\n");
close(fd_r);
close(fd_w2);
return NULL;
}
int main(int argc, const char *argv[])
{
printf("请输入源文件地址:");
scanf("%s",filename);
printf("请输入目的文件地址1:");
scanf("%s",myfile1);
printf("请输入目的文件地址2:");
scanf("%s",myfile2);
pthread_t thread1;
if(0!=pthread_create(&thread1,NULL,callback1,NULL))
{
printf("pthread_create 1 error\n");
return -1;
}
pthread_t thread2;
if(0!=pthread_create(&thread2,NULL,callback2,NULL))
{
printf("pthread_create 2 error\n");
return -1;
}
pthread_join(thread1,NULL);
pthread_join(thread2,NULL);
printf("success\n");
return 0;
}
2.创建两个线程,一个线程实现字符串的逆置,另一个线程打印字符串,并要求打印顺序是
一正一反交替打印
#include <25061head.h>
int i=0;
void *callback1(void* arg)
{
char arr[]="hello";
while(1)
{
if(i==0)
{
sleep(1);
printf("%s\n",arr);
i=1;
}
}
}
void *callback2(void* arg)
{
char arr[]="hello";
int len=strlen(arr);
char temp;
for(int i=0;i<len/2;i++)
{
temp=arr[i];
arr[i]=arr[len-1-i];
arr[len-1-i]=temp;
}
while(1)
{
if(i==1)
{
sleep(1);
printf("%s\n",arr);
i=0;
}
}
}
int main(int argc, const char *argv[])
{
pthread_t thread1,thread2;
if(0!=pthread_create(&thread1,NULL,callback1,NULL))
{
printf("pthread_create 1 error");
return -1;
}
if(0!=pthread_create(&thread2,NULL,callback2,NULL))
{
printf("pthread_create 2 error");
return -1;
}
pthread_join(thread1,NULL);
pthread_join(thread2,NULL);
return 0;
}
3.