/*拷贝文件内容实例
read系统调用、write系统调用
ssize_t read(int fd, void *buf, size_t count);
ssize_t write(int fd, const void *buf, size_t count);//将数据写到一个文件中
一、read、write
一旦有了与一个打开文件描述符像连的文件描述符,只要该文件是用O_RDONLY或O_RDWD标志打开的,就可以用read()系统调用从该文件读取字节
ssize_t read(int fd, void* buf, size_t count);
fd: 要读取得文件描述符。 buf: 指向内存块的指针,从文件读取来的字节放到这个内存块中。 count: 从该文件读取到buf中的字节数
返回值:若出错,返回-1;读文件结束,返回0;否则返回从该文件复制到规定缓冲区中的字节数。
ssize_t write(int fd, const void * buf ,size_t count);
fd:要写入文件的描述符。 buf: 指向内存块的指针。 count: 要写入文件的字节数
返回值:如果出现错误,返回-1;如果写入成功,则返回写入到文件的字节数。
*/
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<errno.h>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//#define ERR_EXIT(m) (perror(m),exit(EXIT_FAILURE))
#define ERR_EXIT(m)
do
{
perror(m);
exit(EXIT_FAILURE);
}while(0) //宏要求一条语句
int main(int argc,char *argv[])// ./0703_5 src dest
{
int infd;
int outfd;
if(argc!=3)
{
fprintf(stderr,"Usage %s src dest
",argv[0]);
exit(EXIT_FAILURE);
}
if((infd=open(argv[1],O_RDONLY))==-1)
ERR_EXIT("open src error");
if((outfd=open(argv[2],O_WRONLY|O_CREAT|O_TRUNC,0644))==-1)
ERR_EXIT("open dest error");
char buf[1024];//不一定读到1024,每次读后,数据指针都会偏移
ssize_t nread;//头文件<sys/types.h>
while((nread=read(infd,buf,1024))>0) //读到文件末尾返回0跳出循环
{
write(outfd,buf,nread);//int fsync(int fd) 。不一定读到磁盘文件中了,可以用fsync 同步到磁盘中
}
close(infd);
close(outfd);
return 0;
}