久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

Linux I/O實現(xiàn)文件復(fù)制

作者:公平   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2014年03月14日   【字體:

前一段時間采用mmap實現(xiàn)了一個文件的復(fù)制操作,現(xiàn)在采用linux的I/O實現(xiàn)文件的復(fù)制,基本的思想是將文件復(fù)制到一個通用的buf中,然后將buf中的數(shù)據(jù)復(fù)制到新的文件中。這種方式比較容易理解,但是也是底層的系統(tǒng)調(diào)用,建議少用,但有時候必須采用(設(shè)備驅(qū)動)。

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

 /*操作的基本權(quán)限*/

    #define DEF_MODE S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH

    int main()
    {
            /*源文件*/
            int fdsrc = open("/home/gong/program/cprogram/Test.c",O_RDONLY,0);
            if(fdsrc==-1)
            {
                    printf("error!!!\n");
                    exit(-1);
            }

            /*獲得源文件的大小*/
            struct stat statbuf;
            fstat(fdsrc,&statbuf);
            int length = statbuf.st_size;

            /*目的文件*/
            int fddst = open("/home/gong/program/cprogram/copydata.c",O_CREAT|O_RDWR,DEF_MODE);
            if(fddst==-1)
            {
                    printf("error!!!\n");
                    exit(-1);
            }
           
            /*實現(xiàn)基本的文件內(nèi)容復(fù)制過程*/
            /*基本的思想就是將數(shù)據(jù)首先復(fù)制到一個大小合適的buf中,然后將buf其中的內(nèi)容寫到給文件2*/
    /*每一次都讀入buf中,然后寫buf的數(shù)據(jù)到文件2中*/
            char buf[1024];/*buf大小*/
            char *p = buf;/*指向buf的指針*/
            /*長度統(tǒng)計*/
            int rlength=0,Rlength = 0;                                                       
            int wlength=0;

            while(length > 0)
            {
                    /*先讀后先的過程*/
                    rlength = read(fdsrc,p,1024);
                    Rlength = rlength;
                    while(rlength > 0)/*確保每次讀出來的全部寫入到文件中*/
                    {
                            wlength = write(fddst,p,rlength);
                            rlength -= wlength;/*檢測還有多少沒有被復(fù)制*/
                            p += wlength;/*移動指針到?jīng)]有寫入的區(qū)域*/

                    }
                    p = buf;/*確保每次都是復(fù)制到buf中*/
                    length -= Rlength;
            }

            /*關(guān)閉文件*/
            close(fdsrc);
            close(fddst);
            exit(0);
    }

編譯調(diào)試:
[gong@Gong-Computer cprogram]$ gcc -g copyFile.c -o copyFile
[gong@Gong-Computer cprogram]$ ./copyFile

/*Test.c*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>

/*
char * returnstring(char *string)
{
        //static char buffer[1024];
       
        char * buffer = (char *)malloc(1024);
        strcpy(buffer,string);

        return buffer;
}*/

typedef int (*array10)[10];/*array100可以作為 int a[100]的指針*/
int main()
{
        /*
        int a = 10;
        int *p = &a;

        long int  apple = 0;
        apple = sizeof(int) * p;

        printf("The Number of apple is %ld\n",apple);
        */

        int a[10];
        int i = 0;
        for(i = 0;i<10;++i)
        {
                a[i] = i;
        }

        array10 b = a;
"copydata.c" 47L, 618C       /*這說明說明復(fù)制成功了,在文件中實現(xiàn)了數(shù)據(jù)的復(fù)制*/   
....      

 


以上的代碼說明了基本實現(xiàn)了文件的復(fù)制,后期將采用標(biāo)準(zhǔn)I/O實現(xiàn)文件的復(fù)制。需要注意的是Linux I/O主要是返回了完成的數(shù)據(jù)量,這個可以方便操作。文件的復(fù)制過程是一個常用的過程。但是操作的方式存在一些差別,具體問題具體分析。

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 日韩黄色视屏 | 久久精品区| 久久夜色精品国产欧美乱极品 | a√天堂在线 | 涩涩在线| 色福利网 | 日韩在线视频播放 | 日韩一级免费视频 | 人人爽人人澡 | 91在线小视频 | 亚洲激情久久 | 成年人午夜视频 | 精品一区久久 | 久久亚洲国产精品 | 91女人18毛片水多国产 | 午夜激情视频 | 一级黄色片视频 | 日韩在线免费观看视频 | 亚洲高清视频在线观看 | 精品国产精品 | 精品国产乱码久久久久久蜜柚 | 综合久久久 | 免费黄色av| 国产成人精品亚洲男人的天堂 | 91久久久久国产一区二区 | 91porn在线 | 开心激情婷婷 | 老司机深夜福利视频 | 中文字幕三区 | 成人在线视频免费观看 | 张津瑜国内精品www在线 | 在线观看黄色片 | 成人激情综合网 | 亚洲免费在线视频 | 精品免费视频 | 18视频在线观看 | 一二三四区在线观看 | 国产精品理论片 | www.com国产 | 在线观看黄色小视频 | 一区二区三区中文字幕 |