操作系统上机作业--使用系统调用实现mycp
mycp.c的功能与系统cp程序相同
将源文件复制到目标文件,例子如下:
要求使用系统调用open/read/write/close实现
$ cat /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin ... $ ./mycp /etc/passwd passwd.bak $ cat passwd.bak root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin 复制代码
实现思路:从main
中接受mycp
的参数,open
源文件,用stat
获取文件大小,read
源文件,open
目标文件,将从源文件中读取的字符写入目标文件中。
实现代码
#include<stdio.h> #include<stdlib.h> #include<sys/types.h> #include<unistd.h> #include<sys/stat.h> #include<fcntl.h> int main(int argc,char *argv[]){ int fd; int fsize; char *buffer; struct stat st; if(argc!=3){ printf("Error:parameter wrong!\n"); exit(0); } fd=open(argv[1],O_RDONLY); if(fd<0){ printf("Error:can't open the read-file!\n"); exit(0); } stat(argv[1],&st); fsize=st.st_size; buffer=(char *)malloc((1+fsize)*sizeof(char)); if(!buffer){ printf("Error:memory wrong!\n"); exit(0); } read(fd,buffer,fsize); close(fd); fd=open(argv[2],O_WRONLY|O_CREAT); if(fd<0){ printf("Error:can't open the write-file!\n"); exit(0); } write(fd,buffer,fsize); close(fd); free(buffer); return 0; } 复制代码
运行结果
作者:timestamp84821
链接:https://juejin.cn/post/7020970104963743781