实验1

翻译 2015年11月18日 17:29:06

#include <stdio.h>

int main()

{

  printf("hello world");

  return 0;

}

 

#include <stdio.h>

#include <sys/types.h>

#include <unistd.h>

#include <fcntl.h>

#include <sys/stat.h>

#include <stdlib.h>

/*struct flock

{

  short 1_type;

  off_t 1_start;

  short 1_whence;

  off_t 1_len;

  pid_t 1_pid;

}old_lock,lock;*/

 

int lock_set(int fd,int type)

{

  struct flock old_lock,lock;

  lock.l_whence = SEEK_SET;  //相对位移量的起点:当前位置为文件开头

  lock.l_start = 0;     //加锁区域的相对位移量

  lock.l_len = 0;     //加锁区域长度

  lock.l_type = type;   //锁的类型

  lock.l_pid = -1;      //记录持有锁的进程

 

  fcntl(fd,F_GETLK,&lock);  //fd;根据参数3决定文件是否上锁;struct flock:记录锁的具体状态   总:判断文件是否可以上锁

  if(lock.l_type != F_UNLCK)

   {

     if(lock.l_type == F_RDLCK)    //读取锁(共享锁)

     {

         printf("Read lock already set by %d\n",lock.l_pid);

     }

     else if(lock.l_type == F_WRLCK)   //写入锁(排斥锁)

     {

         printf("Write lock already set by %d\n",lock.l_pid);

     }

   }

 

lock.l_type = type;   //l_type的值可能已被F_GETLK修改过

 

if((fcntl(fd,F_SETLKW,&lock)) < 0)    //阻塞式上锁

{

  printf("Lock failed:type = %d\n",lock.l_type);

  return 1;

}

 

switch(lock.l_type)

{

  case F_RDLCK:

   {

     printf("Read lock set by %d\n",getpid());

   }

  break;

  case F_WRLCK:

   {

      printf("Write lock set by%d\n",getpid());

   }

  break;

  case F_UNLCK:

   {

     printf("Release lock by %d\n",getpid());

     return 1;

   }

  break;

  default:

  break;

}

  return 0;

}

 

写入锁函数1:

int main(void)

{

   int fd;

   fd = open("hello.c",O_RDWR|O_CREAT,0644);

   if(fd<0)

   {

      printf("open file error\n");

      exit(1);

   }

 

   lock_set(fd,F_WRLCK);   //给文件写入锁

   getchar();

 

   lock_set(fd,F_UNLCK);   //给文件解锁

   getchar();

 

   close(fd);

   exit(0);

 

读取锁函数2:

int main(void)

{

   int fd;

   fd =open("hello.c",O_RDWR|O_CREAT,0644);

   if(fd<0)

   {

      printf("open file error\n");

      exit(1);

   }

 

   lock_set(fd,F_RDLCK);//给文件读取锁

   getchar();

 

   lock_set(fd,F_UNLCK);//给文件解锁

   getchar();

 

   close(fd);

   exit(0);

}

}

实验测试1《C++ Primer》第五版——第九章 顺序容器

本测试主要测试顺序容器的大部分通用函数的语法合理性主要文件用途 文件 测试用途 def_and_init/*.cpp 测试顺序容器的定义 assign_and_swap/*.cpp ...

ucore-lab1实验报告

练习一: 1、操作系统镜像文件ucore.img是如何一步一步生成的?(需要比较详细地解释Makefile中每一条相关命令和命令参数的含义,以及说明命令导致的结果) + cc kern/init/i...

C++实验4-继承和派生1

一、问题及代码 /* * 文件名称:继承和派生1学生类 * 作 者:尚超 * 完成日期:2016年4月22日 * 版 本 号:v1.0 * 对...

编译原理 实验1 PL/0语言词法分析

PL/0语言词法分析 一、 实验目的 通过完成词法分析程序,了解词法分析的过程。编制一个读单词程序,对PL/0语言进行词法分析,把输入的字符串形式的源程序分割成一个个单词符号,即基本保留字、标识符...
  • bfboys
  • bfboys
  • 2016年09月08日 17:47
  • 490

java实验3.(1)类的继承性和多态性

需求:编写一个程序(Fruit.java),其中有三个类:Fruit,Orange、Apple,其中,Orange、Apple是Fruit的子类: (1)类Fruit有eat()和main()(入口...

《Python数据分析与挖掘实战》上机实验1—电力窃漏电用户自动识别

本文是对《Python数据分析与挖掘实战》实战篇第一部分——电力窃漏电用户自动识别中上机实验的一个记录。 实验分为两个部分: 利用拉格朗日插值法进行缺失值的补充 构建分类模型对窃漏电用户进行识别 第...

CSAPP lab1 datalab-handout(深入了解计算机系统 实验一)

能看懂的就不写注释了 /* * CS:APP Data Lab * * * * bits.c - Source file with your soluti...
  • lzjsqn
  • lzjsqn
  • 2017年03月11日 22:20
  • 1958

BurpSuite抓包实验(1)

BurpSuite抓包实验 (1)设置服务器 开启浏览器打开设置,“代理服务器”,默认情况下浏览器会选择 “使用IE代理”,我们要添加一个本地代理“127.0.0.1:8080”,先点击 “代理服务...

编译原理 实验2 语法分析器的构造 LL(1)

【实验目的】        练习构造语法分析程序的方法,熟悉上下文无关文法的使用,加深对课堂教学的理解;提高词法分析方法的实践能力 【实验要求】     利用某一高级程序设计语言构造语法分...
  • bfboys
  • bfboys
  • 2016年09月13日 22:54
  • 284

操作系统实验报告:ucore-lab1

系统软件启动过程 这一次实验用的是清华的操作系统实验ucore的lab1 清华的ucore就是在MIT的oslab基础上做的那个东西。做下来感觉确实比jyy写的oslab要好一些。 本次实验需要...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:实验1
举报原因:
原因补充:

(最多只允许输入30个字)