#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(1),并用C语言实现安全
man
命令学习stat(1),man 1 stat
man -k stat
伪代码:获取stat结构体并打印服务器
产品代码码云连接网络
https://gitee.com/haowenfei25/XinXiAnQuanXiTongSheJiJiChu20155308/blob/master/ketang/stat.c数据结构
研究Linux下IPC机制:原理,优缺点,每种机制至少给一个示例,提交研究博客的连接框架
在linux下的多个进程间的通讯机制叫作IPC(Inter-Process Communication),它是多个进程之间相互沟通的一种方法。在linux下有多种进程间通讯的方法:半双工管道、命名管道、消息队列、信号、信号量、共享内存、内存映射文件,套接字等等。使用这些机制能够为linux下的网络服务器开发提供灵活而又坚固的框架。异步
原理:共享内存是在多个进程之间共享内存区域的一种进程间的通讯方式,由IPC为进程建立的一个特殊地址范围,它将出如今该进程的地址空间(这里的地址空间具体是哪一个地方?)中。其余进程能够将同一段共享内存链接到本身的地址空间中。全部进程均可以访问共享内存中的地址,就好像它们是malloc分配的同样。若是一个进程向共享内存中写入了数据,所作的改动将马上被其余进程看到。学习
生成共享内存
文件为:sharememory1.c
码云连接:
文件为:sharememory2.c
码云连接:
原理:管道实际是用于进程间通讯的一段共享内存,建立管道的进程称为管道服务器,链接到一个管道的进程为管道客户机。一个进程在向管道写入数据后,另外一进程就能够从管道的另外一端将其读取出来。
向管道文件中写数据
文件为:PIPE1.c
码云连接:
文件为:PIPE2.c
码云连接:
原理:命名管道(FIFO)是一种特殊类型的文件,它在系统中以文件形式存在。这样克服了管道的弊端,他能够容许没有亲缘关系的进程间通讯。
向命名管道文件中写数据
文件为:FIFO1.c
码云连接:
文件为:FIFO2.c
码云连接:
优缺点:对于命名管道FIFO来讲,IO操做和普通管道IO操做基本同样,可是二者有一个主要的区别,在命名管道中,管道能够是事先已经建立好的
例子
文件为:signal.c
码云连接:
原理:消息队列是内核地址空间中的内部链表,经过linux内核在各个进程直接传递内容,消息顺序地发送到消息队列中,并以几种不一样的方式从队列中得到,每一个消息队列能够用IPC标识符惟一地进行识别。内核中的消息队列是经过IPC的标识符来区别,不一样的消息队列直接是相互独立的。每一个消息队列中的消息,又构成一个独立的链表。
优缺点:消息队列克服了信号承载信息量少,管道只能承载无格式字符流。命名管道相比,消息队列的优点在于:一、消息队列也能够独立于发送和接收进程而存在,从而消除了在同步命名管道的打开和关闭时可能产生的困难。二、同时经过发送消息还能够避免命名管道的同步和阻塞问题,不须要由进程本身来提供同步方法。三、接收程序能够经过消息类型有选择地接收数据,而不是像命名管道中那样,只能默认地接收。
在课堂实验第二部分,设计mystat时,编译经过后,若是要运行“1.txt”文件,必定要加上文件的名称,即
./stat 1.txt
而不是
./stat
此次的课堂实验测试了咱们学习的内容,感受我本身在新理解一个事物的时候仍是不能很好地利用它,因此第二项测试没有完整地提交,并且完成的程度也不太好。
经过课下练习,我从新学习了Linux下IPC机制:原理,优缺点。我经过对这几种机制的了解和学习,更好地掌握了这方面的知识。