Linux之多程序拷貝與多執行緒拷貝

2021-10-23 09:47:27 字數 4533 閱讀 9018

【讓我們開始編寫**吧】

#include

#include

#include

#include

#include

#include

#include

#include

intcutting

(char

*src,

int n)

int len =

lseek

(fd,0,

seek_end);

//獲取檔案位元組數

if(len % n ==0)

else

copysize =

(len / n)+1

;return copysize;

}void

copy

(char

*src,

char

*dest,

int pos,

int copysize)

lseek

(rfd, pos,

seek_set);

lseek

(wfd, pos,

seek_set);

int len =

read

(rfd, buf,

sizeof

(buf));

write

(wfd, buf, len);}

void

create

(char

*src,

char

*dest,

int copysize,

int n)

else

if(pid ==0)

//子程序}}

intmain

(int argc,

char

*ar**)

【執行結果】

2.通過建立對映區來實現檔案的拷貝

#include

#include

#include

#include

#include

#include

#include

//程序數

int n;

int len;

//檔案拷貝

void

copy

(char

*mem,

char

*dest,

int pos,

int blocksize)

lseek

(wfd, pos,

seek_set);

write

(wfd, mem + pos, blocksize)

;close

(wfd);}

//建立程序

void

create

(char

*mem,

char

*dest,

int blocksize)

else

else}}

}//./copy src dest n

intmain

(int argc,

char

*ar**)

len =

lseek

(rfd,0,

seek_end);

blocksize = len / n;

mem =

mmap

(null

, len, prot_read|prot_write, map_shared, rfd,0)

;if(mem == map_failed)

close

(rfd)

;//建立程序

create

(mem, ar**[2]

, blocksize)

;munmap

(mem, len)

;return0;

}

上面寫過了多程序拷貝,那麼多執行緒拷貝就很簡單啦

【改變】這裡我用了乙個結構體來儲存一些相關資訊,為的就是在建立執行緒時把這些值傳到執行緒的執行函式中。其他的與程序沒有什麼區別

#include

#include

#include

#include

#include

#include

#include

#include

#include

static

int pos =0;

typedef

struct

file;

intcutting

(char

*src,

int n)

int len =

lseek

(fd,0,

seek_end);

//獲取檔案位元組數

if(len % n ==0)

else

copysize =

(len / n)+1

;return copysize;

}void

copy

(char

*src,

char

*dest,

int pos,

int copysize)

lseek

(rfd, pos,

seek_set);

lseek

(wfd, pos,

seek_set);

int len =

read

(rfd, buf,

sizeof

(buf));

write

(wfd, buf, len);}

void

*copyfile

(void

*arg)

void

create

(file *file)

}int

main

(int argc,

char

*ar**)

【執行結果】

使用對映區實現多執行緒拷貝

如果檔案大小不能整除執行緒數,那麼最後乙個執行緒要多拷貝 (檔案大小 / 執行緒數) 的餘數

#include

#include

#include

#include

#include

#include

#include

#include

#include

typedef

struct

file;

//程序數

int n;

int len;

//檔案拷貝

void

*copy

(void

*arg)

lseek

(wfd, file-

>pos,

seek_set);

write

(wfd, file-

>mem + file-

>pos, file-

>blocksize)

;close

(wfd)

; file-

>pos +

= file-

>blocksize;

}//建立程序

void

create

(file *file)

else

pthread_join

(tid,

null);

}}//./copy src dest n

intmain

(int argc,

char

*ar**)

len =

lseek

(rfd,0,

seek_end);

file-

>blocksize = len / n;

file-

>mem =

mmap

(null

, len, prot_read|prot_write, map_shared, rfd,0)

;if(file-

>mem == map_failed)

close

(rfd)

;//建立執行緒

Python之多程序和多執行緒

目標 1.os.fork簡單示例 3.使用os.fork多程序解決tcpserver多客戶端連線問題 1.os.fork簡單示例 如下 usr bin env python coding utf 8 import ospid os.fork print pidprint if pid print p...

多執行緒與多程序

程序 程序是程式的一次執行,在傳統的計算機中,程序既是基本的分配單元,也是基本的執行單元。執行緒 執行緒是可執行的實體單元,它是處理機排程的基本單位。由於執行緒在同一位址空間,因此建立和撤銷執行緒的開銷小,執行緒間的通訊效率高,切換迅速。在多處理機系統中,對程序的個數有所限制,但對執行緒的個數不存在...

多執行緒與多程序

魚還是熊掌 多程序多執行緒的選擇 關於多程序和多執行緒,教科書上最經典的一句話是 程序是資源分配的最小單位,執行緒是cpu排程的最小單位 這句話應付考試基本上夠了,但如果在工作中遇到類似的選擇問題,那就沒有這麼簡單了,選的不好,會讓你深受其害。經常在網路上看到有的xdjm問 多程序好還是多執行緒好?...