zoukankan      html  css  js  c++  java
  • 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.如果在一个终端上运行设置读取锁的程序,则在另一个终端上运行设置写入锁的程序,会有什么结果呢?

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

  • 相关阅读:
    hdu1078 记忆化搜索
    AC之路开始了~
    Balanced Lineup poj3264 线段树
    Billboard 题解 hdu2795
    Count Color poj2777 线段树
    D-query SPOJ 树状数组+离线
    Poj 3468 A Simple Problem with Integers 线段树
    最小生成树两大算法总结+模板
    最短路三大算法及其优化算法大总结+模板
    POJ-1502 MPI Maelstrom 迪杰斯特拉+题解
  • 原文地址:https://www.cnblogs.com/gycone/p/9048540.html
Copyright © 2011-2022 走看看