Linux环境编程
Linux环境编程学习重点笔记
有时需要偏执狂
一定要搞懂,千万不要心存侥幸,否则一些问题会让你痛苦不堪(源码面前,了无秘密)。
拥有一某三分地不容易,贵在坚持。
展开
-
Linux5大IO模型
1、概念理解:在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式。 1、同步:所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。就是我调用一个功能,该功能没有结束前,我死等结果。2、异步:当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个原创 2018-04-11 09:29:57 · 586 阅读 · 0 评论 -
深入剖析select、poll、epoll
1、基本概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合: (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。 (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。 (3)如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用到I/O复用。 ...原创 2018-04-11 10:11:08 · 584 阅读 · 0 评论 -
Linux错误代码含义
常用linux错误代码含义,如下表所示:名称值描述EPERM1操作不允许ENOENT2无此文件或目录ESRCH3无此进程EINTR4中断系统调用EIO5I/O 错误ENXIO6无此设备或地址E2BIG...转载 2018-04-11 10:12:30 · 626 阅读 · 0 评论 -
Linux之进程控制
不同进程直接不同步或者通信就会产生竞争关系。下面是一个父子进程同时输出,没有进行同步处理static void print(char *str){ char *ptr; char c; setbuf(stdout , NULL); for(ptr = str ;(c = *ptr++) != 0 ;){//这句for循环,先初始化ptr,然后利用c等于...原创 2017-09-03 15:34:54 · 253 阅读 · 0 评论 -
Linux之进程之间的关系
进程组:一个或多个进程集合,拥有一个组ID(pgid),同一个组中各个进程可以接受来自同一终端的各种信号。会话:一个或多个进程组的集合,拥有一个会话ID(sid),通常通过shell管道将几个进程编成一个组。一个会话可以有一个控制终端,终端登陆情况下称为终端设备,网络登陆下称为伪终端设备。一个会话中的几个进程组,可以分成一个前台进程组和一个或多个后台进程组。从终端键入控制键都将信号发送至...原创 2017-08-26 10:21:14 · 1125 阅读 · 0 评论 -
10章 信号
信号及其宏定义bash配置的组合按键: ctrl+c 产生 SIGINT 中断信号 ctrl+z产生 SIGSTOP信号 ctrl+\产生 SIGQUIT信号 kill -** PID 向某某进程发送信号 ctrl+d产生eof符号,并非信号/* Signals. */#define SIGHUP 1 /* Hangup (POSIX). */#d...原创 2017-08-30 15:27:37 · 681 阅读 · 0 评论 -
Linux之线程介绍
1、为什么要有线程?一个进程可以有多个线程,这个进程本身也叫做线程只不过是主线程。通常主线程分配任务给子线程做。程序设计时候就可以某一时刻不止做一件事情,每一个线程处理各自独立的任务。多个线程自动可以访问相同的存储地址空间和文件描述符。每个线程都包含有表示执行环境所必须的信息,其中包括线程ID、一组寄存器、栈、调度优先级和策略、信号屏蔽字、errno变量及线程私有数据。一个进程所有信息...原创 2018-02-08 11:55:21 · 461 阅读 · 0 评论 -
Linux之线程控制
线程属性通过函数设置创建线程时候的属性。 int makethread(void * (*fn)(void *) , void *arg)//创建带有分离属性的进程 { int err; pthread_t tid;//线程结构体 pthread_attr_t attr;//线程属性结构体 err = pthread_attr_init(&...原创 2017-09-04 21:56:57 · 434 阅读 · 0 评论 -
Linux之高级IO
简述Linux5大IO模型非阻塞IO 非阻塞IO也就是当读取或者写低速设备时候,设备没有准备好的时候,读写函数直接错误返回,表示如果函数继续执行下去,那么将阻塞。记录锁 记录锁是读写锁的一种扩展类型,可用于亲缘关系或无亲缘关系的进程之间共享某个文件的读与写。被锁住的文件通过文件描述符进行访问,执行上锁的操作函数是fcntl,这种类型的锁通常在内核中维护。 ...原创 2017-09-10 11:46:46 · 1296 阅读 · 0 评论 -
15章 进程间通信之消息传递(管道、FIFO、消息队列)
管道 管道一般是半双工(数据只能在一个方向上流动),管道只能在具有公共祖先(亲缘关系)的两个进程之间使用。一个管道由一个进程创建,在进程fork之后,管道就可以在父子进程之间通信了。特点:它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。它只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间)。它可以看成是一种特殊的文件,对于它的读写也可以使用...原创 2017-09-10 11:47:22 · 2391 阅读 · 0 评论 -
15章 进程间通信之同步(互斥锁、条件变量、读写锁、信号量)
同步: 为了允许在线程和进程间共享数据,必须同步。互斥锁和条件变量是同步的基础。如果互斥锁或者条件变量存放在多个进程间共享的某一个内存区,那么通过它可以进行多进程同步。互斥锁和条件变量 互斥量(mutex)从本质上说是一把锁,在访问共享资源前对互斥量进行设置(加锁)。在访问完成后释放(解锁)互斥量,对互斥量进行加锁以后,任何其他试图再次对互斥量加锁的线程都会被阻塞直到当前...原创 2017-09-15 15:54:47 · 1399 阅读 · 0 评论 -
15章 进程间通信之共享内存区(Posix、System V共享内存)
共享内存区介绍 共享内存是可用IPC形式中最快的。一旦这样的内存区映射到共享它的进程的地址空间,这些进程间数据的传递就不再涉及内核(不需要执行内核调用传递数据)。然而往该共享内存区存放信息或从中取走信息的进程间通常需要某种形式的同步。传统IPC: 服务器从输入文件读。该文件的数据由内核读入自己的内存空间,然后从内核复制到服务器进程。服务器往一个管道、 FIFO或消息队列以一条消息的形式写入这原创 2017-09-15 15:55:13 · 834 阅读 · 0 评论