热度 18
2015-3-4 18:21
785 次阅读|
0 个评论
2.6 定位文件 2.6.1 函数名 lseek 2.6.2 函数原形 off_t lseek(int fd, off_t offset, int whence); 2.6.3 函数功能 重新定位文件的读写位置 2.6.4 所属头文件 sys/types.h unistd.h 2.6.5 返回值 成功:返回移动后的文件距离头文件的位置 失败:-1 2.6.6 参数说明 fd:要定位的文件的文件描述符 offset:偏移量 whence:SEEK_SET:将该文件的偏移量设置为距文件开始处的offset个字节 SEEK_CUR:将该文件的偏移量设置为距当前值加offset,offset可正可负。 SEEK_END:将该文件的偏移量设置为文件长度加offset个字节,offset可正可负。 2.7 复制文件描述符 2.7.1 函数名 dup 2.7.2 函数原形 int dup(int oldfd); int dup2(int oldfd, int newfd); 2.7.3 函数功能 复制一个文件描述符 2.7.4 所属头文件 unistd.h 2.7.5 返回值 成功:返回新的文件描述符 失败:-1 2.7.6 参数说明 oldfd:待复制的老的文件描述符 newfd:dup2则可以用newfd参数指定新描述的数值。如果newfd已经打开,则先将其关闭。如若oldfd等于newfd,则dup2返回newfd,而不关闭它。 小实验:创建一个aim.c文件,且将hello.c中的前10个字节复制到aim.c中 附录: #includestdio.h #includesys/types.h #includesys/stat.h #include fcntl.h #includeunistd.h int main() { int fd1 = 0; int fd2 = 0; int read_flag = 0; int write_flag = 0; char read_buf ; fd1 = open("/home/copy_commander/hello.c",O_RDWR); fd2 = open("/home/copy_commander/aim.c",O_RDWR|O_CREAT,S_IRWXU); if(fd1 = 0) { read_flag = read(fd1, read_buf, 10); if(read_flag = 0) { write_flag = write(fd2, read_buf, 10); if(write_flag = 0) { printf("please check the file!\n"); } else printf("write error!\n"); } else { printf("read error!\n"); } } else { printf("open error!\n"); } close(fd1); close(fd2); return 0; }