Chinaunix首页 | 论坛 | 博客
  • 博客访问: 860174
  • 博文数量: 213
  • 博客积分: 5048
  • 博客等级: 大校
  • 技术积分: 1883
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-14 10:14
文章分类

全部博文(213)

文章存档

2011年(4)

2010年(55)

2009年(47)

2008年(107)

我的朋友

分类: LINUX

2008-11-21 19:08:00

题目是这样的:
如果使用添加标志打开一个文件以便读、写,能否仍用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) |
给主人留下些什么吧!~~