linux下的檔案io程式設計實現檔案的拷貝
阿新 • • 發佈:2019-01-31
/* 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}