2017-2018-1 20155308 《信息安全系统设计基础》第十周课上+课下测试

2017-2018-1 20155308 《信息安全系统设计基础》第十周课上+课下测试

程序运行

  1. 理解test.c, 说出程序功能
  2. 编译运行程序,提交运行截图
#include    <stdio.h>
#include    <stdlib.h>
#include    <fcntl.h>
main()
{
    int fd ;
    int newfd;
    char    line[100];
    fgets( line, 100, stdin ); printf("%s", line );
    fgets( line, 100, stdin ); printf("%s", line );
    fgets( line, 100, stdin ); printf("%s", line );
    fd = open("data", O_RDONLY);    
newfd = dup2(fd,0); 
if ( newfd != 0 ){
        fprintf(stderr,"Could not duplicate fd to 0\n");
        exit(1);
    }
    close(fd);          
fgets( line, 100, stdin ); printf("%s", line );
    fgets( line, 100, stdin ); printf("%s", line );
    fgets( line, 100, stdin ); printf("%s", line );
}
  • 程序功能为:

一、首先采集三次用户输入并打印出来linux

二、以只读的方式打开data文件,记为fdgit

三、用newfd复制fd中的文件并打印用户输入,失败,输出“不能复制fd”shell

  • 编译运行程序

stat命令的实现-mysate

学习使用stat(1),并用C语言实现安全

  1. 提交学习stat(1)的截图
  2. man -k ,grep -r的使用
  3. 伪代码
  4. 产品代码 mystate.c,提交码云连接
  5. 测试代码,mystat 与stat(1)对比,提交截图
  • 利用 man命令学习stat(1),man 1 stat

  • man -k stat

  • 伪代码:获取stat结构体并打印服务器

  • 产品代码码云连接网络

https://gitee.com/haowenfei25/XinXiAnQuanXiTongSheJiJiChu20155308/blob/master/ketang/stat.c数据结构

  • mystat 与stat(1)对比

课下做业-IPC

研究Linux下IPC机制:原理,优缺点,每种机制至少给一个示例,提交研究博客的连接框架

  • 共享内存
  • 管道
  • FIFO
  • 信号
  • 消息队列

介绍

在linux下的多个进程间的通讯机制叫作IPC(Inter-Process Communication),它是多个进程之间相互沟通的一种方法。在linux下有多种进程间通讯的方法:半双工管道、命名管道、消息队列、信号、信号量、共享内存、内存映射文件,套接字等等。使用这些机制能够为linux下的网络服务器开发提供灵活而又坚固的框架。异步

共享内存

  • 原理:共享内存是在多个进程之间共享内存区域的一种进程间的通讯方式,由IPC为进程建立的一个特殊地址范围,它将出如今该进程的地址空间(这里的地址空间具体是哪一个地方?)中。其余进程能够将同一段共享内存链接到本身的地址空间中。全部进程均可以访问共享内存中的地址,就好像它们是malloc分配的同样。若是一个进程向共享内存中写入了数据,所作的改动将马上被其余进程看到。学习

  • 优缺点:共享内存是IPC最快捷的方式,由于共享内存方式的通讯没有中间过程,而管道、消息队列等方式则是须要将数据经过中间机制进行转换。共享内存方式直接将某段内存段进行映射,多个进程间的共享内存是同一块的物理空间,仅仅映射到各进程的地址不一样而已,所以不须要进行复制,能够直接使用此段空间。
  • 例子:一个进程write存储输入,一个进程将读出共享内存中的数据
  • 生成共享内存

文件为:sharememory1.c

码云连接:

  • 获取共享内存

文件为:sharememory2.c

码云连接:

  • 结果:

管道

  • 原理:管道实际是用于进程间通讯的一段共享内存,建立管道的进程称为管道服务器,链接到一个管道的进程为管道客户机。一个进程在向管道写入数据后,另外一进程就能够从管道的另外一端将其读取出来。

  • 优缺点:管道是由内核管理的一个缓冲区,一个缓冲区不须要很大,它被设计成为环形的数据结构,以便管道能够被循环利用。当管道中没有信息的话,从管道中读取的进程会等待,直到另外一端的进程放入信息。当管道被放满信息的时候,尝试放入信息的进程会等待,直到另外一端的进程取出信息。当两个进程都终结的时候,管道也自动消失。
    管道只能在本地计算机中使用,而不可用于网络间的通讯。
  • 例子:一个进程向管道文件中写数据,一个进程将读出数据
  • 向管道文件中写数据

文件为:PIPE1.c

码云连接:

  • 从管道文件中读数据

文件为:PIPE2.c

码云连接:

  • 结果

FIFO

  • 原理:命名管道(FIFO)是一种特殊类型的文件,它在系统中以文件形式存在。这样克服了管道的弊端,他能够容许没有亲缘关系的进程间通讯。

  • 例子:一个进程向文件中写数据,一个进程将读出数据并丢弃
  • 向命名管道文件中写数据

文件为:FIFO1.c

码云连接:

  • 从命名管道文件中读数据并丢弃

文件为:FIFO2.c

码云连接:

  • 结果

信号

  • 原理:信号机制是unix系统中最为古老的进程之间的通讯机制,用于一个或几个进程之间传递异步信号。信号能够有各类异步事件产生,好比键盘中断等。shell也可使用信号将做业控制命令传递给它的子进程。
  • 优缺点:对于命名管道FIFO来讲,IO操做和普通管道IO操做基本同样,可是二者有一个主要的区别,在命名管道中,管道能够是事先已经建立好的

  • 例子

文件为:signal.c

码云连接:

  • 结果

消息队列

  • 原理:消息队列是内核地址空间中的内部链表,经过linux内核在各个进程直接传递内容,消息顺序地发送到消息队列中,并以几种不一样的方式从队列中得到,每一个消息队列能够用IPC标识符惟一地进行识别。内核中的消息队列是经过IPC的标识符来区别,不一样的消息队列直接是相互独立的。每一个消息队列中的消息,又构成一个独立的链表。

  • 优缺点:消息队列克服了信号承载信息量少,管道只能承载无格式字符流。命名管道相比,消息队列的优点在于:一、消息队列也能够独立于发送和接收进程而存在,从而消除了在同步命名管道的打开和关闭时可能产生的困难。二、同时经过发送消息还能够避免命名管道的同步和阻塞问题,不须要由进程本身来提供同步方法。三、接收程序能够经过消息类型有选择地接收数据,而不是像命名管道中那样,只能默认地接收。

代码中运行的问题

在课堂实验第二部分,设计mystat时,编译经过后,若是要运行“1.txt”文件,必定要加上文件的名称,即

./stat 1.txt

而不是

./stat

感觉

此次的课堂实验测试了咱们学习的内容,感受我本身在新理解一个事物的时候仍是不能很好地利用它,因此第二项测试没有完整地提交,并且完成的程度也不太好。

经过课下练习,我从新学习了Linux下IPC机制:原理,优缺点。我经过对这几种机制的了解和学习,更好地掌握了这方面的知识。

相关文章
相关标签/搜索