2023.9.11

 拷贝图片

#include <my_head.h>
#include <pthread.h>
void *copy_png(void*arg);
int main(int argc,const char* argv[])
{
    //创建复制文件
    int c=open("./copy.png",O_WRONLY|O_CREAT|O_TRUNC,0777);
    close(c);
    //打开要复制的文件
    int a=open("./apt.png",O_RDONLY);
    //打开创建的新文件
    int b=open("./copy.png",O_WRONLY);
    //计算出文件的小
    off_t size=lseek(a,0,SEEK_END);
    //光标偏移到开头
    lseek(a,0,SEEK_SET);
    //创建线程
    pthread_t copy;
    pthread_create(&copy,NULL,copy_png,(void*)&size);
    //定义变量
    char buf;
    //定义循环增量
    off_t i=0;
    //循环开始拷贝
    while(1){
        read(a,&buf,1);
        write(b,&buf,1);
        i++;
        if(size/2==i){
            break;
        }
    }
    close(a);
    close(b);
    //等待线程结束
    pthread_join(copy,NULL);
    return  0;
}
void *copy_png(void*arg)
{
    int a=open("./apt.png",O_RDONLY);
    int b=open("./copy.png",O_WRONLY);
    //偏移读取后半段
    lseek(a,(*(off_t*)arg)/2,SEEK_SET);
    //偏移拷贝后半段
    lseek(b,(*(off_t*)arg)/2,SEEK_SET);
    char buf;
    while(1){
        ssize_t res=read(a,&buf,1);
        write(b,&buf,res);
        if(0==res){
            break;
        }
    }
    close(a);
    close(b);
    //结束线程,返回给主线
    pthread_exit(NULL);
}

 

#include  <my_head.h>
char buf[]="1234567";//创建全局变量字符串
void *funA(void* arg);
void *funB(void* arg);
int main(int argc,const char* argv[])
{
    //A线程创建
    pthread_t A;
    pthread_create(&A,NULL,funA,NULL);
    //B线程创建
    pthread_t B;
    pthread_create(&B,NULL,funB,NULL);
    //设置死循环,防止支线直接结束
    while(1);
    return 0;
}
void *funA(void* arg)
{
    //A线程输出字符串
   while(1){
        puts(buf);
    }
}
void *funB(void* arg)
{
    //B线程逆置字符串
    while(1){
           	int i=0,j=strlen(buf)-1;
	        while(i<j){
		        char n=buf[i];buf[i]=buf[j];buf[j]=n;
		        i++;
		        j--;
                }
                }
}

未出现不是顺序的字符串! 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值