Linux基本操作

 

 

Linux下C编程基础

  1. 实验目的

    掌握系统调用,API函数,Shell命令之间的关系

    掌握文件描述符的概念

    重点掌握不带缓存的I/O函数的用法

  2. 实验内容
    1. Copy_file文件操作
      
    2. Fcntl()函数了解。
      
  3. 实验步骤

 

实验一:

1.进入名为6的文件夹,本次实验使用1copy_file文件。

2.进入文件夹1copy_file

3.使用vi编写名为src_file。

4.根据题目要求修改宏定义。

5根据题目要求修改名为dest_file文件权限为742.

6.编译源程序,生成目标文件,并且对源文件进行调试。

7测试操作。

  1. 设置断点行号
    
  2. 运行程序
    
  3. 打印src_file的值即open()函数的返回值。
    
  4. 打印未执行前的dest_file的值(open函数未运行前,变量dest_file在内存中并不是空白的,而是有值得)。
    
  5. 打印dest_file运行后的值。
    
  6. 打印未运行前的real_read_len的值,同dest_file一样的道理。
    
  7. 把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.如果在一个终端上运行设置读取锁的程序,则在另一个终端上运行设置写入锁的程序,会有什么结果呢?

答:设置读锁后,再运行写锁,写锁排队等待读锁释放,在进行写锁。

posted @ 2018-05-16 22:19  神奇小秀才  阅读(159)  评论(0编辑  收藏  举报