12 2021 档案
Linux服务器编程一——基础
摘要:一、网络I/O的阻塞、非阻塞,同步、异步 典型的一次lO的两个阶段是什么?数据就绪和数据读写数据就绪: 根据系统lO操作的就绪状态 ·阻塞·非阻塞 数据读写:根据应用程序和内核的交互方式 ·同步·异步 一个典型的网络IO接口调用,分为两个阶段,分别是"数据就绪"和“数据读写",数据就绪阶段分为阻塞和
阅读全文
Linux网络编程六——UDP和广播
摘要:一、UDP通信 服务端代码: /* #include <sys/types.h> #include <sys/socket.h> ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct socka
阅读全文
Linux网络编程五——I/O多路复用(I/O多路转接)
摘要:一、什么是I/O多路复用 I/O多路复用,I/O就是指的我们网络I/O,多路指多个TCP连接(或多个Channel),复用指复用一个或少量线程。串起来理解就是很多个网络I/O复用一个或少量的线程来处理这些连接。I/O 多路复用使得程序能同时监听多个文件描述符,能够提高程序的性能,Linux 下实现
阅读全文
Linux网络编程四——并发TCP通信
摘要:一、多进程实现并发 思路: 1.一个父进程,多个子进程。 2.父进程:负责等待并接受客户端的连接。 3.子进程:完成通信,接受一个客户端连接,就创建一个子进程用于通信。 服务器端: /* 多进程版本 */ #include<stdio.h> #include<arpa/inet.h> #includ
阅读全文
Linux网络编程三——TCP通信和SOCKET相关函数
摘要:一、TCP通信 1.1 TCP与UDP 1.2 TCP通信流程 通信的流程 服务器端 (被动接受连接的角色) 1. 创建一个用于监听的套接字 - 监听:监听有客户端的连接 - 套接字:这个套接字其实就是一个文件描述符 2. 将这个监听文件描述符和本地的IP和端口绑定(IP和端口就是服务器的地址信息)
阅读全文
Linux网络编程二——套接字基础
摘要:一、什么是套接字 所谓socket(套接字),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接是应用程序与网络协议根进
阅读全文
Linux网络编程一——网络基础
摘要:一、网络结构模式 1.1 C/S结构 服务器 - 客户机,即 Client - Server(C/S)结构。C/S 结构通常采取两层结构。服务器负责数据的管理,客户机负责完成与用户的交互任务。客户机是因特网上访问别人信息的机器,服务器则是提供信息供人访问的计算机。客户机通过局域网与服务器相连,接受用
阅读全文
Linux多线程编程三——模型与信号
摘要:一、生产者消费者模型 /* 实现粗略的生产者消费者模型(未同步,未使用信号量) */ #include<stdio.h> #include<string.h> #include<unistd.h> #include <pthread.h> struct Node{ int num; struct N
阅读全文
Linux多线程编程二——同步与锁
摘要:一、同步 1.1 线程不同步会产生的问题 如下代码和结果所示,当线程没有同步时,多个线程抢占CPU资源,可能导致各种问题的发生。 /* 使用多线程实现卖票: 有三个窗口,一共是100张票 */ #include<stdio.h> #include<string.h> #include<unistd.
阅读全文
Linux多线程编程一——基础概念
摘要:一、线程 1.1 什么是线程 与进程(process)类似,线程(thread)是允许应用程序并发执行多个任务的一种机制。一个进程可以包含多个线程。同一个程序中的所有线程均会独立执行相同程序,且共享同一份全局内存区域,其中包括初始化数据段、未初始化数据段,以及堆内存段。(传统意义上的UNIX 进程只
阅读全文
Linux多进程编程五——守护进程
摘要:一、三个概念 1.1.终端 在UNIX系统中,用户通过终端,登录得到一个shell进程,这个终端称为shell进程的控制终端,进程中,控制终端是保存在PCB中的信息,而fork()会复制PCB中的信息,故shell进程启动的其他进程的控制终端也是这个终端。默认情况下(没有重定向),每个进程的标准输入
阅读全文
Linux多进程编程五——进程通信其三
摘要:一、共享内存 1.1什么是共享内存 共享内存允许两个或者多个进程共享物理内存的同一块区域(通常被称为段)。由于一个共享内存段会称为一个进程用户空间的一部分,因此这种IPC 机制无需内核介入。所有需要做的就是让一个进程将数据复制进共享内存中,并且这部分数据会对其他所有共享同一个段的进程可用。与管道等要
阅读全文
Linux多进程编程四——进程通信其二
摘要:一、信号 1.1什么是信号 信号是 Linux进程间通信的最古老的方式之一,是事件发生时对进程的通知机制,有时也称之为软件中断,它是在软件层次上对中断机制的一种模拟,是一种异步通信的方式。信号可以导致一个正在运行的进程被另一个正在运行的异步进程中断.转而处理某一个突发事件。 发往进程的信号多数都是来
阅读全文
Linux多进程编程三——进程通信其一
摘要:一、进程通信基础 1.什么是进程通信 进程是一个独立的资源分配单元,不同进程(这里所说的进程通常指的是用户进程)之间的资源是独立的,没有关联,不能在一个进程中直接访问另一个进程的资源。但是,进程不是孤立的,不同的进程需要进行信息的交互和状态的传递等,因此需要进程间通信( IPC:Inter Proc
阅读全文
Linux多进程编程二——进程创建与死亡
摘要:一、进程的创建与相关函数 1.进程创建 系统允许一个进程创建新的进程,新进程为原进程的子进程,子进程还可以创建新的子进程,形成进程树结构模型,其相关函数为pid_t fork(void);具体使用方式如下: /* #include <sys/types.h> #include <unistd.h>
阅读全文
Linux多进程编程一——进程基础
摘要:一、进程基本概念 1.程序和进程 程序:程序是包含一系列信息的文件,以下这些信息描述了如何在运行时创建一个进程: 1.二进制格式标识:每个程序文件都包含用于描述可执行文件格式的元信息。内核利用此信息来解释文件中的其他信息。(ELF可执行连接格式) 2.机器语言指令:对程序算法进行编码。 3.程序入口
阅读全文
Linux系统编程三——文件操作
摘要:一、标准C库与Linux系统库函数区别 1.库示意图和内存示意图 2.文件描述符 文件描述符是内核为了高效管理已被打开的文件所创建的索引,用于指向被打开的文件,所有执行I/O操作的系统调用都通过文件描述符;文件描述符是一个简单的非负整数,用以表明每个被进程打开的文件。程序刚刚启动时,第一个打开的文件
阅读全文
Linux系统编程二——Makefile与gdb调试
摘要:一、Makefile 1. 什么是Makefile 一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,Makefile 文件定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 Makefile文件就像一个Shel
阅读全文