题目是这样的:
如果使用添加标志打开一个文件以便读、写,能否仍用lseek在任一位置开始读?能否用lseek更新文件中任一部分的数据?请编写一段程序以验证之。
首先,这个题目觉得不错,可以练练手,用到open,lseek,write,read函数
先看实现代码如下:
1 #include <fcntl.h> 2 #include <stdio.h> 3 int 4 main(void) 5 { 6 int fd; 7 char *buf = "hello,eelb!!"; 8 char buf_read[6]; 9 if ((fd=open("append_txt", O_RDWR | O_APPEND | O_TRUNC)) < 0) { 10 perror("open"); 11 exit(0); 12 } 13 else { 14 if (write(fd, buf, strlen(buf)) != strlen(buf)) { 15 perror("write first"); 16 exit(0); 17 } 18 if (lseek(fd, 0, SEEK_SET) == -1) { 19 perror("lseek error"); 20 exit(0); 21 } 22 if (read(fd, buf_read, (sizeof(buf_read)-1)) != (sizeof(buf_read)-1)) { 23 perror("read error"); 24 exit(0); 25 } 26 buf_read[5] = '\0'; 27 printf("%s\n", buf_read); 28 if (write(fd, buf, strlen(buf)) != strlen(buf)) { 29 perror("write second"); 30 exit(0); 31 } 32 exit(0); 35 } 38 }
|
有几个地方注意的,第一次写完,read参数的缓冲长度,原来我是用strlen来获取的,编译的时候发现总是在read error那退出,后来才发现开始数组buf_read里面没有赋值,所以strlen会是多少,那是个不确定的数,strlen是通过遇到第一个0,来确定的,所以。。呵呵要小心啊。
c语言烦人的就是需要写这么的异常判断,可是这次有一次证明,还是很有用的,要不我估计又要郁闷半天还不知道错误。
阅读(1558) | 评论(0) | 转发(0) |