<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        Linux I/O實現文件復制

        作者:公平   來源:本站原創   點擊數:  更新時間:2014年03月14日   【字體:

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

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

         /*操作的基本權限*/

            #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);
                    }
                   
                    /*實現基本的文件內容復制過程*/
                    /*基本的思想就是將數據首先復制到一個大小合適的buf中,然后將buf其中的內容寫到給文件2*/
            /*每一次都讀入buf中,然后寫buf的數據到文件2中*/
                    char buf[1024];/*buf大小*/
                    char *p = buf;/*指向buf的指針*/
                    /*長度統計*/
                    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;/*檢測還有多少沒有被復制*/
                                    p += wlength;/*移動指針到沒有寫入的區域*/

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

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

        編譯調試:
        [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       /*這說明說明復制成功了,在文件中實現了數據的復制*/   
        ....      

         


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

        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮