利用文件读写操作-完成大文件的复制粘贴

利用读写函数,完成对文件的复制,粘贴。

初级阶段,文件的复制粘贴不使用多线程来搞(虽然之前开多线程来进行排序(此处手动狗头))


说明:因为文件往往很大,所以需要要到循环来读文件,和写文件。但是毕竟是模拟复制,粘贴。所以每次我就只读10个字节的大小,然后写到被粘贴文件中。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>


*先往:"copy.txt"里面写120字节的数据,其中的lseek求文件大小,在上一篇博客里面已经说过了。*
int main()
{
    int fd = open("copy.txt",O_WRONLY|O_CREAT|O_TRUNC,0644);
    if(fd == -1)
    {
        perror("open error");
        exit(-1);
    }

    char * str = "hello world\n";
    int len = strlen(str);
    
    int i = 0;
    while(i < 10)
    {
        int ret = write(fd,str,len);
        if(ret == -1)
        {
            perror("write error");
            exit(-1);
        }
        i++;
    }

    off_t surrpos = 0;
    surrpos = lseek(fd,0,SEEK_END);
    printf("%d\n",surrpos);

	close(fd);
    return 0;
}

再来粘贴到文件"paste.txt"中,每次在"copy.txt"中读10个字节到 "paste"中,直到读到文件末尾。

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>

int main()
{
    int readfd = open("copy.txt",O_RDWR,0644);
    if(readfd == -1)
    {
        perror("open copy.txt error");
        exit(-1);
    }

    int writefd = open("paste.txt",O_RDWR|O_CREAT,0644);
    if(writefd == -1)
    {

        perror("open paste.txt error");
        exit(-1);
    }

    char buf[10];
    int ret = 0;
    while(ret = read(readfd,buf,sizeof(buf)))
    {
        if(ret == -1)
        {
            perror("read error");
            exit(-1);
         }

        ret = write(writefd,buf,ret);
        if(ret == -1)
        {
            perror("write error");
            exit(-1);
        }
    }

    off_t surrpos;
    surrpos = lseek(readfd,0,SEEK_END);
    printf("%d\n",surrpos);

	close(writefd);
	close(readfd);
    return 0;
}

总结:在实际应用中,一个进程读文件的速度是远远不够的。所以在后期会开多线程来读写文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章