日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

linux .o文件 复制,Linux I/O实现文件复制

發(fā)布時(shí)間:2023/12/15 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux .o文件 复制,Linux I/O实现文件复制 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

#include

#include

#include

#include

#include

#include

/*操作的基本權(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);

}

/*實(shí)現(xiàn)基本的文件內(nèi)容復(fù)制過程*/

/*基本的思想就是將數(shù)據(jù)首先復(fù)制到一個(gè)大小合適的buf中,然后將buf其中的內(nèi)容寫到給文件2*/

/*每一次都讀入buf中,然后寫buf的數(shù)據(jù)到文件2中*/

char buf[1024];/*buf大小*/

char *p = buf;/*指向buf的指針*/

/*長(zhǎng)度統(tǒng)計(jì)*/

int rlength=0,Rlength = 0;

int wlength=0;

while(length > 0)

{

/*先讀后先的過程*/

rlength = read(fdsrc,p,1024);

Rlength = rlength;

while(rlength > 0)/*確保每次讀出來(lái)的全部寫入到文件中*/

{

wlength = write(fddst,p,rlength);

rlength -= wlength;/*檢測(cè)還有多少?zèng)]有被復(fù)制*/

p += wlength;/*移動(dòng)指針到?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

#include

#include

#include

/*

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?????? /*這說(shuō)明說(shuō)明復(fù)制成功了,在文件中實(shí)現(xiàn)了數(shù)據(jù)的復(fù)制*/

....

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

總結(jié)

以上是生活随笔為你收集整理的linux .o文件 复制,Linux I/O实现文件复制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。