博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UNIX-LINUX C语言编程->实验室->多次打开文件实验
阅读量:6907 次
发布时间:2019-06-27

本文共 1555 字,大约阅读时间需要 5 分钟。

本实验基于《unix-linux编程实践教程》第二章习题2.6

实验说明:

unix允许一个文件同时被多个进程打开,也允许一个进程同时打开好几个文件,做多次打开文件的实验:

(1)以读的方式打开文件

(2)以写的方式打开文件

(3)再次以读的方式打开文件

这时有三个文件描述符,接下来

(4)从第一个文件描述符中读取20字节,显示读到的内容

(5)向第二个文件描述符写入"testing 123..."

(6)从第三个文件描述符读出20字节,显示读到的内容

代码:

#include
#include
#include
#include
#include
int main(int ac,char *av[]){ int fd1; int fd2; int fd3; char *buf; buf = malloc(30000); /*以读的方式打开文件*/ if((fd1 = open(av[1],O_RDONLY)) == -1) { perror(av[1]); exit(1); } /*以写的方式打开文件*/ if((fd2 = open(av[1],O_WRONLY)) == -1) { perror(av[1]); exit(1); } /*再以读的方式打开文件*/ if((fd3 = open(av[1],O_RDONLY)) == -1) { perror(av[1]); exit(1); } /*从第一个文件描述符读20字节*/ if(read(fd1,buf,20) == -1) { perror(av[1]); exit(1); } printf("%s",buf); printf("\n"); /*从第二个文件描述符写入“testing 123...”*/ if(write(fd2,"testing 123...",sizeof("testing 123...")) != sizeof("testing 123...")) { perror(av[1]); exit(1); } /*从第三个文件描述符读出20字节*/ if(read(fd3,buf,20) == -1) { perror(av[1]); exit(1); } printf("%s",buf); printf("\n");}

被读文件内容:

1231231231231231231231231231233123123131231

结果:

终端显示:

12312312312312312312

testing 123...

被读文件内容:

testing 123...^@1231231231231233123123131231

结论:

多次打开文件后,虽然具有个多文件描述符,但所有文件描述符都指向同一个文件

疑问:

在向第二个文件描述符中插入字符串时,怎么还插入了一个"^@"

 

转载于:https://www.cnblogs.com/cation/archive/2012/12/14/2818098.html

你可能感兴趣的文章
jmeter-noguimodel
查看>>
Git使用++
查看>>
[C++]基本类型转换
查看>>
清除windows系统垃圾文件简易脚本(bat)
查看>>
Android WindowManager实现悬浮窗效果 (一)——与当前Activity绑定
查看>>
陶哲轩实分析 定理7.5.1 (方根判别法) 证明
查看>>
The direct sum of functions
查看>>
《Linux内核设计与实现》读书笔记(十五)- 进程地址空间(kernel 2.6.32.60)
查看>>
python实战===2017年30个惊艳的Python开源项目 (转)
查看>>
TurnipBit:和孩子一起动手DIY“滚动”的生日礼物
查看>>
删除一个链表中的重复元素
查看>>
C# 在多线程环境中,进行安全遍历操作
查看>>
Win7 防护墙设置——Ping命令,Http访问
查看>>
是男人就下100层【第一层】——高仿微信界面(6)
查看>>
day16- re模块(正则表达式 三种查找方法findall search match)
查看>>
CentOS7.x配置bond0
查看>>
vue随记
查看>>
Quick-cocos2d-x3.3 Study (十一)--------- 让物体从屏幕的外边移动到屏幕中指定位置...
查看>>
[转] 数据挖掘中易犯的几大错误
查看>>
select函数用法详解
查看>>