apue lseek 读写练习

 1 //apue p73 3.6 练习题
 2 //如果使用追加方式打开文件,是否可以从任意位置读,写
 3 #include <stdio.h>
 4 #include <fcntl.h>
 5 #include <unistd.h>
 6 #include <stdlib.h>
 7 #include <string.h>
 8 void set_fl(int fd, int flag);
 9 
10 int main(int argc, char const *argv[])
11 {
12     char rbuf;
13     char *wbuf = malloc(1024*sizeof(char));
14     memset(wbuf, 0, 1024*sizeof(char));
15     int fd, dupfd;
16     fd = open(argv[1], O_CREAT|O_RDWR,S_IRWXU|S_IRGRP|S_IWGRP|S_IRWXO);
17     dupfd = dup(fd);
18     sprintf(wbuf, "first fd =%d second fd =%d pid=%d\n", fd, dupfd, getpid());
19     if (fd < 0)
20          perror("open error");
21     set_fl(fd, O_APPEND);  //设置追加模式
22     lseek(fd, 2 ,SEEK_SET);//设置文件目前位置是第二个字节
23     write(fd, wbuf, strlen(wbuf));//写文件
24     lseek(fd, 2 ,SEEK_SET);//从第二个字节读文件
25     while (read(fd, &rbuf, 1) > 0) {//循环读文件。
26          write(STDOUT_FILENO, &rbuf, 1); //输出读到的内容
27     }
28     close(fd);
29     close(dupfd);
30     free(wbuf);
31     exit(0);
32 }
33 
34 // set file fl
35 void set_fl(int fd, int flag) {
36     int val;
37     fcntl(fd, F_GETFL, 0);
38     val |= flag;
39     fcntl(fd, F_SETFL, val);
40 }

 

执行结果

第一次执行
[root@MiWiFi-R3-srv apue test]# ./lseek  lseek.log
rst fd =3 second fd =4 pid=4943
[root@MiWiFi-R3-srv apue test]#
第二次执行


[root@MiWiFi-R3-srv apue test]# ./lseek  lseek.log       

rst fd =3 second fd =4 pid=4943
first fd =3 second fd =4 pid=4955

结论:

  O_APPEND方式打开文件的话,写会定位到文件末尾,

而读可以任意指定。

 

转载于:https://www.cnblogs.com/snail88/p/8068009.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值