1 #include <my_head.h>
2 struct Node
3 {
4 const char *srcfile;
5 const char *dstfile;
6 int stat;
7 int len;
8 };
9 //获取文件大小函数
10 int getlen(const char *srcfile, const char *dstfile)
11 {
12 int fd1,fd2;
13 //以只写形式打开源文件
14 if((fd1=open(srcfile,O_RDONLY)) == -1)
15 {
16 perror("srcfile open error");
17 return -1;
18 }
19
20 if((fd2=open(dstfile, O_WRONLY|O_CREAT|O_TRUNC, 0664)) == -1)
21 {
22 perror("dstfile open error");
23 return -1;
24 }
25 //求源文件的长度
26 int len = lseek(fd1,0,SEEK_END);
27 close(fd1);
28 close(fd2);
29 return len;
30 }
31 //拷贝文件函数
32 void copy_file(const char *srcfile, const char *dstfile, int start, int len)
33 {
34 int fd1,fd2;
35 if((fd1=open(srcfile,O_RDONLY)) == -1)
36 {
37 perror("srcfile open error");
38 return ;
39 }
40 if((fd2=open(dstfile,O_WRONLY)) == -1)
41 {
42 perror("dstfile open error");
43 return ;
44 }
45 //将光标移动至开始拷贝的位置
46 lseek(fd1,start,SEEK_SET);
47 lseek(fd2,start,SEEK_SET);
48 //开始拷贝
49 char buf[100]="";
50 int sum=0;
51
52 while(1)
53 {
54 int ret = read(fd1, buf, sizeof(buf));
55 sum += ret;
56
57 if(ret == 0)
58 {
59 break;
60 }
61 write(fd2, buf, ret);
62 }
63 printf("拷贝成功\n");
64 }
65 //线程1
66 void *task1(void *arg)
67 {
68 //解压结构体数据
69 struct Node File = *(struct Node*)arg;
70 //调用拷贝函数复制后一半文件
71 copy_file(File.srcfile, File.dstfile, File.stat, File.len);
72 pthread_exit(NULL);//退出当前线程
73 }
74
75 int main(int argc, const char *argv[])
76 {
77 //判断传入文件个数
78 if(argc != 3)
79 {
80 printf("input file error\n");
81 printf("usage:./a.out srcfile dstfile\n");
82 return -1;
83 }
84 //获取文件大小
85 int len = getlen(argv[1],argv[2]);
86
87 //定义结构体变量
88 struct Node cpy_file1 = {argv[1], argv[2], len/2, len-len/2};
89
90 pthread_t tid;//创建线程
91
92 if(pthread_create(&tid,NULL,task1,&cpy_file1))
93 {
94 printf("线程创建失败\n");
95 return -1;
96 }
97 //调用拷贝函数拷贝前一半文件
98 copy_file(argv[1], argv[2],0 ,len/2);
99 //阻塞回收线程1资源
100 pthread_join(tid,NULL);
101 return 0;
102 }
1 #include <my_head.h>
2
3 char buff[]="1234567";
4
5 void* fun(void* arg)
6 {
7 while(1)
8 {
9 int i=0;
10 while(buff[i++]!='\0');
i--;
11 int j=--i;
i=0;
12 for(;i<j;i++,j--)
13 {
14 int temp=buff[i];
15 buff[i]=buff[j];
16 buff[j]=temp;
17 }
18 }
19 }
20
21 int main(int argc, const char *argv[])
22 {
23 pthread_t tid;
24 if(pthread_create(&tid,NULL,fun,NULL)!=0)
25 {
26 fprintf(stderr,"pthread_create failed __%d__\n",__LINE__);
27 return -1;
28 }
29 while(1)
30 {
31 printf("%s\n",buff);
32 }
33 return 0;
34 }