歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Linux下C語言實現多線程文件復制

1、具體思路

把一個文件分成N份,分別用N個線程copy,
 
每個線程只讀取指定長度字節大小的內容
 
最後一個線程的源文件所指定的結束位置是文件的實際大小
 
每個線程讀取指定源文件部分的起始位置和結束位置的內容到緩沖區
 
每個線程將緩存中的內容寫入目的文件的指定開始位置和結束位置
 
主線程必須等到所有線程copy完成後才能退出
 
2.有關文件操作的函數
 
2.1. 文件的打開和關閉
 
2.1.1 open()函數
 
      open()函數的作用是打開文件, 其調用格式為:
 
        int open(char *filename, int access); 
 
  該函數表示按access的要求打開名為filename的文件,
 
  返回值為文件描述字
 
  open()函數打開成功, 返回值就是文件描述字的值(非負值), 否則返回-1。 
 
2.1.2 close()函數
 
      close()函數的作用是關閉由open()函數打開的文件, 其調用格式為:
 
          int close(int handle); 
 
      該函數關閉文件描述字handle相連的文件。
 
2.2.讀寫函數
 
2.2.1 read()函數
 
      read()函數的調用格式為:
 
          int read(int handle, void *buf, int count); 
 
      read()函數從handle(文件描述字)相連的文件中, 讀取count個字節放到buf所指的緩沖區中,
 
      返回值為實際所讀字節數, 返回-1表示出錯。返回0 表示文件結束。
 
2.2.2 write()函數
 
      write()函數的調用格式為:
 
          int write(int handle, void *buf, int count);   
 
 
      write()函數把count個字節從buf指向的緩沖區寫入與handle相連的文件中,
 
      返回值為實際寫入的字節數
 
2.3.隨機定位函數
 
lseek()函數
 
      lseek()函數的調用格式為:
 
        int lseek(int handle, long offset, int fromwhere); 
 
      該函數對與handle相連的文件位置指針進行定位, 功能和用法與fseek() 函數相同。

Copyright © Linux教程網 All Rights Reserved