欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

mmap中怎么實(shí)現(xiàn)文件拷貝功能

mmap中怎么實(shí)現(xiàn)文件拷貝功能,很多新手對此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

成都創(chuàng)新互聯(lián)公司成立于2013年,我們提供高端成都網(wǎng)站建設(shè)公司、成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)站定制、成都全網(wǎng)營銷推廣、微信小程序、微信公眾號開發(fā)、成都網(wǎng)站營銷服務(wù),提供專業(yè)營銷思路、內(nèi)容策劃、視覺設(shè)計(jì)、程序開發(fā)來完成項(xiàng)目落地,為成都除甲醛企業(yè)提供源源不斷的流量和訂單咨詢。

具體內(nèi)容如下

/*  * gcc -Wall -O3 -o copy_mmap copy_mmap.c */ #include < stdio.h > #include < stdlib.h > #include < string .h > /* for memcpy */ #include < strings.h > #include < sys / mman.h > #include < sys / types.h > #include < sys / stat.h > #include < fcntl.h > #include < unistd.h > #define PERMS 0600 int main ( int argc, char * argv[] ){  int   src, dst;  void   * sm, * dm;   struct stat statbuf;  if ( argc != 3 ) {  fprintf( stderr, " Usage: %s \n " , argv[ 0 ] );  exit( EXIT_FAILURE ); }  if ( ( src = open( argv[ 1 ], O_RDONLY ) ) < 0 ) {  perror( " open source " );  exit( EXIT_FAILURE ); }  /* 為了完成復(fù)制,必須包含讀打開,否則mmap()失敗 */   if ( ( dst = open( argv[ 2 ], O_RDWR | O_CREAT | O_TRUNC, PERMS ) ) < 0 ) {  perror( " open target " );  exit( EXIT_FAILURE ); }  if ( fstat( src, & statbuf ) < 0 ) {  perror( " fstat source " );  exit( EXIT_FAILURE ); }  /*   * 參看前面man手冊中的說明,mmap()不能用于擴(kuò)展文件長度。所以這里必須事  * 先擴(kuò)大目標(biāo)文件長度,準(zhǔn)備一個(gè)空架子等待復(fù)制。  */   if ( lseek( dst, statbuf.st_size - 1 , SEEK_SET ) < 0 ) {  perror( " lseek target " );  exit( EXIT_FAILURE );  }   if ( write( dst, & statbuf, 1 ) != 1 ) {  perror( " write target " );  exit( EXIT_FAILURE ); }    /* 讀的時(shí)候指定 MAP_PRIVATE 即可 */  sm = mmap( 0 , ( size_t )statbuf.st_size, PROT_READ,    MAP_PRIVATE | MAP_NORESERVE, src, 0 );  if ( MAP_FAILED == sm ) {  perror( " mmap source " );  exit( EXIT_FAILURE ); }  /* 這里必須指定 MAP_SHARED 才可能真正改變靜態(tài)文件 */  dm = mmap( 0 , ( size_t )statbuf.st_size, PROT_WRITE,    MAP_SHARED, dst, 0 );  if ( MAP_FAILED == dm ) {  perror( " mmap target " );  exit( EXIT_FAILURE ); } memcpy( dm, sm, ( size_t )statbuf.st_size );  /*   * 可以不要這行代碼  *  * msync( dm, ( size_t )statbuf.st_size, MS_SYNC );  */   return ( EXIT_SUCCESS );}

mmap()好處是處理大文件時(shí)速度明顯快于標(biāo)準(zhǔn)文件I/O,無論讀寫,都少了一次用戶空間與內(nèi)核空間之間的復(fù)制過程。操作內(nèi)存還便于設(shè)計(jì)、優(yōu)化算法。

文件I/O操作/proc/self/mem不存在頁邊界對齊的問題,但至少Linux的mmap()的最后一個(gè)形參offset并未強(qiáng)制要求頁邊界對齊,如果提供的值未對齊,系統(tǒng)自動向上舍入到頁邊界上。malloc()分配得到的地址不見得對齊在頁邊界上。

/proc/self/mem和/dev/kmem不同。root用戶打開/dev/kmem就可以在用戶空間訪問到內(nèi)核空間的數(shù)據(jù),包括偏移0處的數(shù)據(jù),系統(tǒng)提供了這樣的支持。顯然代碼段經(jīng)過/proc/self/mem可寫映射后已經(jīng)可寫,無須mprotect()介入。

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。

新聞標(biāo)題:mmap中怎么實(shí)現(xiàn)文件拷貝功能
網(wǎng)頁網(wǎng)址:http://chinadenli.net/article30/joscso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、網(wǎng)站改版響應(yīng)式網(wǎng)站、標(biāo)簽優(yōu)化、網(wǎng)站排名手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)