用到的函数
1.create
目的:创建/重写文件,如果不存在,创建;如果存在,清空;
头文件:#include<fcntl.h>
函数原型:int fd = create(char * filename, mode_t mode)
返回:-1 遇到错误;fd 成功
2.write
目标:将内存中的数据写入文件
函数原型:ssize_t result = write(int fd, void * buf, size_t amt)
amt:要写的字节数
头文件:#include<unistd.h>
返回:-1;num written
调用write后需要检查返回值是否与要写入的相同;
流程
open sourcefile for read
open copyfile for write
while not eof:
read frombuffer to copy
close sourcefile
close copyfile
代码
** cp1.c
* version 1 of cp - users read and write with tunable buffer size
*
* usage: cp1 src dest
*/
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#define BUFFERSIZE 4096
#define COPYMODE 0644
void oops(char *, char *);
int main(int ac, char* av[]) {
int in_fd, out_fd, n_chars;
char buf[BUFFERSIZE];
if(ac!=3) {
fprintf(stderr, "usage: &s source destinatrion", *av);
exit(1);
}
if((in_fd=open(av[1], O_RDONLY)) == -1) {
oops("Cannot open ", av[1]);
}
if((out_fd=creat(av[2], COPYMODE)) == -1) {
oops("Cannot creat ", av[2]);
}
while( (n_chars = read(in_fd, buf, BUFFERSIZE)) > 0) {
if(write(out_fd, buf, n_chars) != n_chars) {
oops("Write error from", av[2]);
}
}
if(n_chars == -1) {
oops("Read error from", av[1]);
if(close(in_fd)==-1 || close(out_fd)==-1) {
oops("Error closing files", "");
}
}
return 0;
}
void oops(char *s1, char *s2) {
fprintf(stderr, "Error: %s", s1);
perror(s2);
exit(1);
}