- 论坛徽章:
- 0
|
原帖由 sopc_rome 于 2006-8-16 11:25 发表
- /* 以下代码是一个经典的拷贝文件的代码 */
- while(bytes_read=read(from_fd,buffer,BUFFER_SIZE))
- {
- if((bytes_read==-1)&&(errno!=EINTR)) break; /* 一个致命的错误发生了 */
- else if(bytes_read>0):
- {
- ptr=buffer;
- while(bytes_write=write(to_fd,ptr,bytes_read))
- {
- if((bytes_write==-1)&&(errno!=EINTR))break; /* 一个致命错误发生了 */
- else if(bytes_write==bytes_read) break; /* 写完了所有读的字节 */
- else if(bytes_write>0) /* 只写了一部分,继续写 */
- { ptr+=bytes_write; bytes_read-=bytes_write;
- }
- }
- if(bytes_write==-1)break; /* 写的时候发生的致命错误 */
- }
- }
- close(from_fd);
- close(to_fd);
复制代码
对于上面的read和write函数,他们是怎么保证下次的读出(写入)位置能跟在本次读出(写入)位置的后面?通过file结构里的f_pos来实现?如果对同一文件既追加又读出那么会不会乱呢?能不能发个相关的read/write的代码让小弟学习学习!
read、write的文件操作指针自动控制吧,不用你操心啊!除非你要向前或向后移动,否则默认就是你上次操作结束的位置。
拷贝程序,当然不能用于对同一个文件操作,如果对同一个文件操作,你应该自己控制读写指针,用lseek函数操作。 |
|