□□实验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排除了死锁的情况。