Linux基本操作
Linux下C编程基础
- 实验目的
掌握系统调用,API函数,Shell命令之间的关系
掌握文件描述符的概念
重点掌握不带缓存的I/O函数的用法
- 实验内容
Copy_file文件操作
Fcntl()函数了解。
- 实验步骤
实验一:
1.进入名为6的文件夹,本次实验使用1copy_file文件。
2.进入文件夹1copy_file
3.使用vi编写名为src_file。
4.根据题目要求修改宏定义。
5根据题目要求修改名为dest_file文件权限为742.
6.编译源程序,生成目标文件,并且对源文件进行调试。
7测试操作。
设置断点行号
运行程序
打印src_file的值即open()函数的返回值。
打印未执行前的dest_file的值(open函数未运行前,变量dest_file在内存中并不是空白的,而是有值得)。
打印dest_file运行后的值。
打印未运行前的real_read_len的值,同dest_file一样的道理。
把src_file写入dest_file,即real_read_len的值为src_file的大小。
实验二:
1.进入读写操作文件夹,使用make生成可执行程序。
3.通过视频,或者自己实践能够清晰的认识到读操作是属于共享锁,而写操作属于排斥锁。后面我们将对源程序进行调试。
4.调试read_lock
5.设置断点为第16行。
6.运行调试,打印为被赋值的"fd"的值(为内存中原有的值)。
7.打印"fd"运行后open函数赋额值。
8.由于"fd"大于零,所以调用lock_set(fd,F_RDLCK)为文件上读取锁,上锁后程序处于等待键盘输入字符的等待状态。
9.调用lock_set在lock_set.c文件中。此时fd=6,type=0。
10.此时运行函数fcntl(fd,F_GETLK,&lock)判断文件是否可以上锁。
此时我们打印type(即F_RDLCK的值)为零。判断lock.l_type的状态,打印lock.l_type的值(此时为2,也就说明此时处于解锁状态)可以加锁。
11.判断fcntl函数值。
12.根据lock.l_lock的值进行堵塞式上锁或者解锁。
13.2、fcntl()给文件上锁需要执行几次,为什么?
答:fcntl给文件上锁需要执行2次,第一次判断文件状态,是否处于解锁状态。
第二次,便是给文件上锁。
14.如果在一个终端上运行设置读取锁的程序,则在另一个终端上运行设置写入锁的程序,会有什么结果呢?
答:设置读锁后,再运行写锁,写锁排队等待读锁释放,在进行写锁。