【讓我們開始編寫**吧】
#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問 多程序好還是多執行緒好?...