POSIX文件及目录管理

□□实验5.2.5 文件定位用lseek()函数实现以下功能

1.获取文件大小

2.为文件添加指定长度的空洞

3.在指定位置写入指定内容

4.读出指定位置的内容

程序代码:


程序测试:



程序分析:用lseek();函数定位到文件末尾后40bit的位置写入abc,添加了40bit的空洞;用lseek();函数定位到文件开头后20 bit的位置写入lalala。


□实验5.3.2 scandir

用scandir()读取目录内容。只显示以字母开头的文件。

程序代码:



程序测试:



程序分析:

参考网站:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=14949191&id=4786163


□□实验5.2.7映射文件到内存

示例程序: mmap_file_and_insert.c

1.运行示例程序。给出运行结果及分析。

2.用映射文件到内存的方式实现以下功能:

a)删除文件中的指定内容。

b)允许用户输入需要被删除的位置。

程序1测试:


程序1分析:

将文件hello传入,用lseek();函数获得文件的大小,再定位到文件末尾添加大小为1~2倍页的大小,在空闲末尾写入内容,将文件内容映射到内存,输入添加内容,输入添加内容的位置,用memmove函数移动要添加位置后面的所有信息,用mecpy函数再将添加内容加入,msync函数写回磁盘,关闭映射,截断文件,将多余空间删除。

程序2代码:



程序2测试:



程序分析:

映射到内存,再用memmove函数覆盖想要删除的部分,最后写回磁盘,关闭映射。


★★实验5.2.8-2死锁

1.用fcntl()对文件进行锁操作,模拟一个死锁的局面。

2.给出程序运行结果及分析。

程序分析:

Lock_1文件先在开头设置长度为10的写锁,若写不成功则等待,sleep 10秒,再在文件开头偏移20的位置设置长度为10的写锁,若写不成功则等待,sleep 10 秒。

Lock_2文件相反设置,两文件同时运行,测试能否写入成功。

 

程序测试:

第一个加锁文件代码(lock_1):




第二个加锁文件代码(lock_2):



测试结果:



测试结果并不像预期一样,可能是Linux排除了死锁的情况。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值