完全復制一個文件的內容到另外一個文件
思路解析:
首先我這里使用了三個.c文件,分別是:yanyu.c、yanyu_old.c、yanyu_now.c
其中yanyu.c負責將yanyu_old.c中的內容讀入到buff緩沖區中,然后再從buff緩沖區中將數據寫入到yanyu_now.c中,最終實現將yanyu_old.c中的內容復制到yanyu_now.c中。
具體實現如下:
首先將yanyu_old.c、yanyu_now.c兩個文件分別打開,然后分別獲取這兩個文件的文件描述符。
再通過將yanyu_old.c中的內容通過read函數讀入到buff緩沖區中;
之后判斷read返回的讀入緩沖區實際的字節數;如果實際的字節數等于零則表示讀入完成;最后再依次通過write函數以此寫入到yanyu_now.c文件中。最終首先復制的效果。
完整代碼如下:
yanyu.c
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
int main (){int fd_old = open("./yanyu_old.c",O_RDWR);//打開文件,獲取其文件描述符int fd_now = open("./yanyu_now.c",O_RDWR);//打開文件,獲取其文件描述符if(fd_old < 0 || fd_now < 0){//如果其文件描述符為負,則打開失敗perror("open");return -1;}printf("open seccessful\n");//否則輸出提示打開成功信息char buff[100]={0};//定義一個字符數據充當緩沖區int write_buff_to_now;//用于接收從buff寫入yanyunow.c中的字符數據大小int read_buff = read(fd_old,buff,sizeof(buff));//獲取從yanyu_old.c讀入buff中的實際值while(read_buff != 0){//如果讀入的實際字符不為零,執行寫入操作if(read_buff < 0 ){perror("read");return -1;}write_buff_to_now = write(fd_now,buff,read_buff);//從buff寫入到yanyunow.c中read_buff = read(fd_old,buff,sizeof(buff));//再依此從yanyuold.c中將字符讀入到buff中if(write_buff_to_now < 0 ){//寫入失敗perror("write");return -1;} }int close_old = close(fd_old);//一開始打開了文件,使用完成之后需要關閉文件int close_now = close(fd_now);//一開始打開了文件,使用完成之后需要關閉文件if(close_old < 0 || close_now <0){//關閉文件失敗,提示錯誤信息并結束perror("close");return -1;}printf("close successful\n");//成功關閉文件return 0;
}
yanyu_old.c
隨便寫就行,反正最后會通過執行yanyu.c文件,將這里的內容全部復制到yanyu_now.c里面的
yanyu_now.c
//這里為空,啥也不需要,到時候執行yanyu.c之后會將yanyu_old.c里面的內容給復制過來。
運行之前:
yanyu_old.c
yanyu_now.c
運行之后:
yanyu_now.c