- 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;
}
运行结果
欢迎留言交流。。。。