📄 sys_filecopy.c
字号:
#include <asm/io.h>#include <asm/uaccess.h>#include <asm/unistd.h>#include <linux/fcntl.h>asmlinkage int sys_filecopy(char *fs,char *ft){ int ids, idt,i,size=0; //源文件代号ids,目的文件代号idt,每次读取的字节数i,文件总长度size mm_segment_t temp; //保存寻址界限 char buf[512]; //缓冲区 ids=sys_open(fs,O_RDONLY,0); //打开源文件 if(ids==-1){ //打开错误 printk("Cannot open source file!\n"); sys_exit(-1); } idt=sys_open(ft,O_CREAT|O_WRONLY|O_TRUNC,0666); //打开目的文件 if(idt==-1){ //打开错误 printk("Cannot open target file!\n"); sys_exit(-1); } temp=get_fs(); //保存旧的寻址界限 set_fs(get_ds()); //设置新的寻址界限.防止非法访问 while((i=sys_read(ids,buf,512))>0){ //每次读取512B size+=i; if(sys_write(idt,buf,i)!=i){ //写的字节数不等于读的字节数 printk("Copy error!\n"); sys_exit(-1); } } set_fs(temp); //恢复旧的寻址界限 sys_close(ids); //关闭源文件 sys_close(idt); //关闭目的文件 return size; //返回文件长度}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -