1. 程式人生 > >linux下的檔案io程式設計實現檔案的拷貝

linux下的檔案io程式設計實現檔案的拷貝

/* copy_file.c */

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>

#define	BUFFER_SIZE	1024		/* 每次讀寫快取大小,影響執行效率*/
#define SRC_FILE_NAME	"src_file"	/* 原始檔名 */
#define DEST_FILE_NAME	"dest_file"	/* 目標檔名檔名 */
#define OFFSET		10240		/* 拷貝的資料大小 */
 	
int main()
{
	int src_file, dest_file;
	unsigned char buff[BUFFER_SIZE];
	int real_read_len;
	
	/* 以只讀方式開啟原始檔 */
	src_file = open(SRC_FILE_NAME, O_RDONLY);
	
	/* 以只寫方式開啟目標檔案,若此檔案不存在則建立, 訪問許可權值為644 */
	dest_file = open(DEST_FILE_NAME, O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
	
	if (src_file < 0 || dest_file < 0)
	{
		printf("Open file error\n");
		exit(1);
	}
	
	/* 將原始檔的讀寫指標移到最後10KB的起始位置*/
	lseek(src_file, -OFFSET, SEEK_END);
	
	/* 讀取原始檔的最後10KB資料並寫到目標檔案中,每次讀寫1KB */
	while ((real_read_len = read(src_file, buff, sizeof(buff))) > 0)
	{
		write(dest_file, buff, real_read_len);
	}
	
	close(dest_file);
	close(src_file);
	
	return 0;
	
}

Makefile檔案

EXEC = copy_file
OBJS = copy_file.o
HEADERS = 

CC = gcc
INC = -I.
CFLAGS = ${INC} -g 

all:${EXEC}
${EXEC} : ${OBJS}
	${CC} ${CFLAGS} ${LDFLAGS} -o [email protected] ${OBJS} 

${OBJS} : ${HEADERS}

.PHONY : clean
clean :
	-rm -f ${OBJS} ${EXEC}