功能:把源文件的最后20KB字节拷贝到目标文件分10次完成
系统I/O:
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/types.h>
#include<fcntl.h>
#include<sys/stat.h>
//open write read lseek close 函数所在的头文件
#define BUFFER_SIZE 1024 /*每次读写缓存大小,影响运行效率*/
#define SRC_FILE_NAME "/home/yy/src_file" /*源文件*/
#define DES_FILE_NAME "/home/yy/des_file" /*目标文件*/
#define OFFSET 20480
int main()
{
int src_file,dest_file;
unsigned char buff[BUFFER_SIZE];
int real_get_length;
int times=10;
/*以只读的方式打开源文件*/
src_file=open(SRC_FILE_NAME,O_RDONLY);
/*以只写的方式打开目标文件,若此文件不存在则创建*/
dest_file=open(DES_FILE_NAME,O_WRONLY|O_CREAT);
if(src_file<0||dest_file<0)
{
printf("Open file error\n");
exit(0);
}
/*将源文件的读写指针移动到最后20kb的起始位置*/
lseek(src_file,-OFFSET,SEEK_END);
/*读取源文件的最后20kb数据并写到目标文件中,每次读写1kb,读取10次*/
while((real_get_length=read(src_file,buff,sizeof(buff)))>0&×>0)
{
times--;
write(dest_file,buff,real_get_length);
}
close(dest_file);
close(src_file);
return 0;
}
标准I/O:
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/types.h>
#include<fcntl.h>
#include<sys/stat.h>
//open write read lseek close 函数所在的头文件
#define BUFFER_SIZE 1024 /*每次读写缓存大小,影响运行效率*/
#define SRC_FILE_NAME "/home/yy/src_file" /*源文件*/
#define DES_FILE_NAME "/home/yy/des_file" /*目标文件*/
#define OFFSET 20480
int main()
{
FILE *src_file,*dest_file;
unsigned char buff[BUFFER_SIZE];
int real_get_length;
int times=10;
src_file=fopen(SRC_FILE_NAME,r);//只读打开
dest_file=fopen(DES_FILE_NAME,w+);//没有就创建
if(dest_file<0||src_file<0)
{
printf("error \n");
exit(0);
}
fseek(src_file,-OFFSET,SEEK_END);
while((real_get_length=fread(buff,1,sizeof(buff),src_file))>0||times>0)
{
times--;
fwrite(buff,1,read_get_length,dest_file);
}
fclose(dest_file);
fclose(src_file);
return 0;
}