IO Day5

  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 }

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值