文件IO编程五

来源:互联网 发布:艾瑞数据分析 编辑:程序博客网 时间:2024/05/02 06:46

这一节主要是将系统IO的四个函数:read write

(1)read

头文件:#include <unistd.h>

ssize_t read(int fd, void * buf, size_t count);

说明:read是把参数fd所指的文件传送count个字节到buf指针所指的内存中去。若参数count为0,则read()不会有作用并返回0。返回值为实际读取的字节数,若返回0.表示已经读取完成,此外文件读写位置会随读取到的字节移动。


(2)write

头文件:#include <unistd.h>

ssize_t write (int fd, const void * buf, size_t count);

说明:write()函数会把参数buf所指的内存写入count个字节到参数fd所指的文件内。


程序:

int fd_src = open(argv[1], O_RDONLY);

int fd_dst = open(argv[2], O_RDONLY|O_CREAT|O_TRUNC,0644);

char buf[100];

int nread,nwrite;

while(1)

{

bzero(buf, 100);

nread = read(fd_src, buf, 100);

if(nread == -1)

{

perror("read() failed");

exit(1);

}

if(nread == 0)

break;

char *p = buf;

while(nread > 0)

{

nwrite = write(fd_dst, p, nread);

nread -= nwrite;

p += nwrite;   //意思是因为write函数不会自动转移位置去写入。

}

}


(3)lseek
头文件:#include <sys/types.h>    #include <unistd.h>

定义函数:off_t lseek(int fildes, off_t offset, int whence);

说明:每一个已打开的文件都有一个读写位置,当打开文件时通常其读写位置是指向文件开头,若是以附加的方式打开文件(如O_APPEND),则读写位置会指向文件尾。read()时,读写位置会随之增加,lseek()便是用来控制该文件的读写位置,参数fildes为已打开的文件描述符,参数offset为根据参数whence来移动读写位置的位移数。

参数whence为下列其中一种:

1) 欲将读写位置移到文件开头时:lseek(int fildes, 0, SEEK_SET);
2) 欲将读写位置移到文件尾时:lseek(int fildes, 0, SEEK_END);
3) 想要取得目前文件位置时:lseek(int fildes, 0, SEEK_CUR);

0 0
原创粉丝点击