Linux
文章平均质量分 80
DuckyLoser
这个作者很懒,什么都没留下…
展开
-
进程间通信——管道
一、进程间通信的目的 1.数据传输:一个进程需要将它的数据发送给另一个进程。 2.资源共享:多个进程之间共享同样的资源。 3.通知事件:一个进程需要给另一个或是一组进程发送消息,通知它们发生了某种事件,(比如进程终止时要通知父进程)。 4.进程控制:有些进程希望控制另一个进程,此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。二、什么是管道 ...原创 2018-04-15 10:54:54 · 155 阅读 · 0 评论 -
生产者消费者模型
生产者消费者模型在日常生活中,我们大多数人都扮演着消费者的角色,比如在食堂吃饭、超市购物等。那那些食品还有原材料的供应商则扮演着生产者的角色,当然肯定需要一个场所来为我们提供服务了。但是生产、消费者和场所理解了,那他们之间又存在着什么关系呢?生产者和生产者:在植物生长过程中呢,为了更好的接受光照进行光合作用,所以它们之间都在进行竞争的进行光照。供货商也是,会争取一个场所的代理权。所以生产者和生产者...原创 2018-05-04 17:19:12 · 208 阅读 · 0 评论 -
初识进程
fork函数: 在Linux中fork函数非常重要,它从已经存在的进程中创建一个新进程。新进程为子进程原进程为父进程。#include<unistd.h>pid_t fork(void);返回值:子进程返回0,父进程返回子进程id,错误-1。进程调用fork,当控制转移到内核中的fork代码后,内核做:1.分配新的内存块和内存数据结构给子进程2.将父进程部分数据结构内容拷贝至...原创 2018-04-27 13:10:20 · 147 阅读 · 0 评论 -
线程的同步与互斥
互斥:情况:大多数线程试图修改临界资源,这时就可以申请锁,保证临界资源的安全性。mutex(互斥量)如果多个线程一同操作共享变量,会造成一些问题。一个售票系统,多个线程一起进行购票操作。#include<stdio.h>#include<pthread.h>#include<unistd.h>#include<stdlib.h>int ti...原创 2018-04-27 18:11:11 · 172 阅读 · 0 评论 -
UDP网络编程套接字
//服务器#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<stdlib.h>#include<unistd.h>#include<arpa/inet.h>#include<netinet/in.h>#incl原创 2018-06-01 15:30:04 · 233 阅读 · 0 评论 -
TCP网络编程套接字(单进程)
//服务器#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<stdlib.h>#include<stdlib.h>#include <arpa/inet.h>#include<unistd.h>#include原创 2018-06-01 15:52:57 · 238 阅读 · 0 评论 -
TCP网络编程套接字(多进程)
//服务器#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<stdlib.h>#include<stdlib.h>#include <arpa/inet.h>#include<unistd.h>#include原创 2018-06-01 16:49:58 · 399 阅读 · 0 评论 -
比较进程和多线程TCP网络编程套接字
//服务器#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<stdlib.h>#include<stdlib.h>#include <arpa/inet.h>#include<unistd.h>#include原创 2018-06-01 16:58:30 · 235 阅读 · 0 评论 -
Web协议(二)
ICMP协议:ICMP协议是一个网络层协议。 ICMP功能:1.确认IP包是否成功到达目标地址。2.通知在发送过程中IP包被丢弃的原因。3.ICPM是基于IP协议工作的,但并不是传输层的功能。4.ICMP只能搭配IPv4使用。IPv6 对应使用ICMPv6.ping命令:[dyt@iz2ze2wt8nsnj7uk...原创 2018-06-20 19:14:20 · 286 阅读 · 0 评论 -
网络——IP协议
TCP/IP的心脏是互联网层。这一层主要是IP和ICMP两个协议组成。IP相当于OSI参考模型中的第三层——网络层。网络层的主要作用是:“实现终端节点之间的通信”,点对点通信。 ...原创 2018-06-21 13:49:34 · 246 阅读 · 0 评论 -
网络——TCP协议
TCP TCP是一种面向有连接的传输层协议,它可以保证两端通信主机之间的通信可达。TCP能够正确处理在传输过程中丢包、传输顺序乱掉等异常情况。此外TCP还能够有效的利用带宽,缓解网络拥堵。 然而,为了建立于断开连接,有时它至少需要7次的发包和收包(三次握手、四次挥手),导致网络流量的浪费。TCP报头格式:32位序列号:是指发送数据的位置,每发送一次数据,就累加一次数据字节数的大小。序列...原创 2018-07-06 11:12:54 · 294 阅读 · 0 评论 -
TCP协议通讯流程
服务器初始化:调用socket,创建文件描述符调用bind,将当前文件描述符和ip/port绑定在一起,如果这个端口已经被其他进程占用,便会绑定失败。调用listen,声明这个文件描述符作为服务器的文件描述符,为后面的accept做准备。调用accept,并阻塞,等待有客户链接。建立连接的过程:三次握手调用socket,创建文件描述符调用connect,向服务器发起连接请求;(第一次):conne...原创 2018-06-08 16:41:59 · 1125 阅读 · 0 评论 -
Web协议(一)
以太网帧格式: 1.源地址和目的地址值得是网卡的硬件地址(MAC地址),出厂时固化。2.帧协议类型字段有三种值:IP、ARP、RARP。3.帧末尾是CRC效验码。认识MAC地址1.MAC地址用来标识数据链路层中相邻的节点2.在网卡出厂时就确定,基本不能修改。3.长度位48位,一般用16进制加冒号表示...原创 2018-06-20 18:05:22 · 5628 阅读 · 0 评论 -
进程间关系和守护进程
进程组:每一个进程除了有一个进程ID外,还属于一个进程组。进程组是一个或是多个进程的集合。每一个进程组有一个唯一的组ID。每一个进程组都有一个组长进程。组长进程的标识是:其进程组ID就等于其进程ID。组长进程可以创建一个一个进程组,创建该组之间的进程,然后终止。只要某个进程组中用进程存在,那么进程组就存在,与组长进程是否终止无关。[root@localhost linux]# sleep 100|...原创 2018-05-04 17:16:13 · 159 阅读 · 0 评论 -
死锁
什么是死锁? 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。或者说“集合中的每一个进程都在等待只能由本集合中的其他进程才能引发的事件,那么该组进程是死锁的”。产生条件:虽然进程在运行过程中,可能发生死锁,但死锁的发生也必须具备一定的...原创 2018-05-03 11:23:53 · 176 阅读 · 0 评论 -
进程间通信——消息队列
消息队列: 1.消息队列提供了从一个进程向另一个进程发送一块数据的方法 2.每个数据块都被认为是有一种类型,接收者进程接收的数据块可以有不同的类型值。 3.消息队列也有管道一样的不足,就是每个消息的最大长度是有限的,每个消息队列的总字节长数也是有上限的,系统的消息队列总数也有一个上限。IPC对象的数据结构:struct ipc_perm { key_t __key; /* K...原创 2018-04-15 11:37:48 · 199 阅读 · 0 评论 -
进程间通信——共享内存
共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程地址空间,这些进程间数据传递将不在涉及到内核,但任何事都有二义性,它是一个临界资源,但这样的方法却没有给提供任何保护。如图: 将共享区的代码通过页表映射到不同的PCB下,就可以实现共享内存,以下为系统调用:int shmget(key_t key,size_t size,int shflg); //创建共享内存void* shmat(...原创 2018-04-15 12:18:32 · 198 阅读 · 0 评论 -
进程间通信——信号量
信号量主要用于同步和互斥的 首先了解一下什么叫进程互斥: 1.由于各进程要求共享资源,而且有一些资源需要互斥使用,因此各进程间竞争使用这些资源,这种关系就称为进程的互斥。 2.系统中的某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源。 3.在进程中涉及到互斥资源的程序段成为临界区。进程同步: 进程同步指的是多个进程需要相互配合共同完成一项任务。信号量P...原创 2018-04-15 14:56:29 · 264 阅读 · 0 评论 -
编写简单的add/sub/mul/div函数,并打包成动/静态库,并分别使用。
//代码add.h#ifndef _ADD_H#define _ADD_Hint myadd(int x,int y);#endifadd.c#include<stdio.h>#include"add.h"int myadd(int x,int y){ return x+y;}sub.h#ifndef _SUB_H#define _SUB_Hint m...原创 2018-03-27 19:34:34 · 1590 阅读 · 0 评论 -
模拟实现僵尸进程和孤儿进程
僵尸进程:如果子进程退出时,没有给父进程反馈信息(1.结果正确退出 2.结果不正确退出 3.程序异常终止),且父进程没有回收,可能造成“僵尸进程”,进而引发内存泄漏。#include<stdio.h>#include<sys/types.h>#include<unistd.h>#include<stdlib.h>int main()...原创 2018-03-23 17:31:22 · 148 阅读 · 0 评论 -
简单的myshell实现
myshell.c//strtok()用来将字符串分割成一个个片段。参数s指向欲分割的字符串,参数delim则为分割字符串中包含的所有字符。//当strtok()在参数s的字符串中发现参数delim中包含的分割字符时,则会将该字符改为\0 字符。//在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回指向被分割出片段的指针。#include&...原创 2018-03-23 14:11:10 · 874 阅读 · 0 评论 -
浅谈编辑器的种类以及rpm安装和yum安装的区别.
gedit编辑器有很多种类,如gedit、GitHub、pico等gedit是一个GNOME桌面环境下兼容UTF-8的文本编辑器。它使用GTK+编写而成,因此它十分的简单易用,有良好的语法高亮,对中文支持很好,支持包括gb2312、gbk在内的多种字符编码。gedit是一个自由软件。这是 Linux 下的一个纯文本编辑器,但你也可以把它用来当成是一个集成开发环境 (IDE), 它会根据不同的语言...原创 2018-03-13 12:57:18 · 241 阅读 · 0 评论 -
Linux的基本命令
1. Linux基本命令2. ls :查看当前目录下的文件(同等与ll),ls -a查看当前目录下的所有文件(包括当前目录和上一级目录),ls -1:使目录按1列排列。3. cd + 文件名:进入文件,cd ..进入上一层目录,cd~进入家目录4. touch + 文档名:新建文档,touch + .文档名:隐藏文档5. mkdir+ 文件名:新建文件夹,mkdir + .文件名:隐藏文件夹6. ...原创 2018-03-13 12:31:55 · 149 阅读 · 0 评论 -
信号的基本概念及产生方式
信号的基本概念 通俗一点说,信号一般做提醒工作,提醒之后会产生一系列的动作,比如红绿灯:过马路见到红灯亮了,提醒自己应该停止过马路,或者听到闹钟响了,或许很多人的动作是关掉闹钟后接着睡吧,但接着睡也是一种动作吧。 在计算机中,信号是由操作系统发出的。首先先看一下计算机中的信号吧。 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTR...原创 2018-04-18 16:33:30 · 1411 阅读 · 0 评论 -
Linux进程信号——信号处理
阻塞信号:一、信号相关概念1.实际执行信号的处理动作称为信号递达(Delivery).2.信号从产生到递达之间的状态称为信号未决(Pending)。(不一定会立即Delivery)3.进程可以选择阻塞(Block)某个信号。(不会递达)4.被阻塞的信号产生时将保持在未决状态,知道进程解除对此信号 的阻塞,才会执行递达。5.阻塞和忽略时不同的,信号被阻塞就不会递达,忽略是在递达之后,可选的一种处理动...原创 2018-04-20 12:37:59 · 534 阅读 · 0 评论 -
进程信号——捕捉信号和可重入函数及SIGCHLD
捕捉信号一、内核实现信号的捕捉 操作系统会在适当的时候给进程发送信号,但是什么时候是最适当的呢?在上图中,在内核态到用户态的时候会对信号进行处理,同时进行检测,如果这时候发现异常,操作系统就会发送信号。sighandler和main函数是使用不同的堆栈空间,它们之间不存在调用和被调用的关系,是两个独立的控制流程。二、sigactionint sigaction(int signo,const...原创 2018-04-20 14:44:49 · 339 阅读 · 0 评论 -
进程与线程
进程:进程的概念:1.程序的一个执行实例,正在执行的程序等。2.内核:担当分配系统资源(cpu时间、内存)的实体。描述进程:1.进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。2.也可以称之为PCB(process control block)进程控制块task_struct-PCB的一种:1.在Linux中描述进程的结构体叫做task_struct.2.task_stru...原创 2018-04-25 17:42:13 · 193 阅读 · 0 评论 -
详解:struct sockaddr_in, struct sockaddr,struct in_addr
一、结构体 struct sockaddr_in, struct sockaddr, struct in_addrstruct sockaddr_in, struct sockaddr,struct in_addr,这是网络编程中常用的结构体,每次都记不住它们各自的成员是啥,需要临时查,为方便以后的查看,在这里总结下。struct sockaddr {unsigned short ...转载 2019-02-22 16:58:30 · 1165 阅读 · 0 评论