
Linux系统编程
文章平均质量分 74
BensonWang221
这个作者很懒,什么都没留下…
展开
-
《Linux高性能服务器编程》笔记之System V IPC
1. semget系统调用 --> 创建一个信号量集#include <sys/sem.h>int semget(key_t key, int nsems, int semflag);key:整数类型键值,用来标识一个全局唯一的信号量集,就像文件名全局唯一标识一个文件一样。要通过信号量通信的进程需要使用相同的键值来创建/获取该信号量。key取值可以是IPC_PRIVATE(0值)或其它非零整数,当IPC_PRIVATE时创建一个仅能被进程使用的信号量。nsems:初始化信.原创 2021-03-09 22:59:11 · 138 阅读 · 0 评论 -
《Linux高性能服务器编程》笔记二
1. SIGPIPE信号当向读端已经关闭的管道或套接字中写数据会引发SIGPIPE信号,而该信号默认结束进程,而我们绝对不希望因为错误的写操作而导致程序退出,引起SIGPIPE信号的写操作设置errno为EPIPE。在代码中需要不会并处理该信号,至少需要忽略它。避免写操作触发SIGPIPE的方法:通过send函数的MSG_NOSIGNAL来禁止触发SIGPIPE信号,这种情况如果send返回-1,应该根据errno的值来判断管道或socket连接的读端是否已经关闭。还可以利用I/O复用系统调原创 2021-03-05 23:52:49 · 161 阅读 · 0 评论 -
Linux Shell编程
1. 环境变量与本地变量VAR=Benson --> 此时VAR是本地变量,如果想让它变成环境变量需要再expotr VAR2. alias起别名alias pg='ps aux | grep'3. unset删除已定义的环境变量或本地变量4. 通配符*匹配0个或多个任意字符?匹配一个任意字符[若干字符]匹配方括号中的任意一个字符,可以[1-9]5. 命令代换由反引号 ` 括起来的也是一条命令,shell先执行该命令,然后将输出结果离开代换到当前命令行中。.原创 2021-02-11 14:37:01 · 270 阅读 · 0 评论 -
Linux系统编程之线程同步
1. 互斥量操作函数pthread_mutex_t --> 锁类型初始化:int pthread_mutex_init(pthread_mutex_t* restrict mutex, const pthread_mutexattr_t* restrict attr);attr一般传入NULL。int pthread_mutex_destroy(pthread_mutex_t* mutex);pthread_mutex_t mutex = PTHREAD_MUTEX_INITI原创 2021-01-31 20:11:45 · 137 阅读 · 0 评论 -
Linux系统编程之线程
1.线程概念LWP:light weight process, 本质上仍是进程(在Linux环境下)进程:独立地址空间,拥有PCB线程:也有PCB,但没有独立的地址空间(共享)区别:在于是否共享地址空间。Linux下,线程是最小的执行单位;进程是最小的分配资源单位,可看成是只有一个线程的进程。2.Linux内核线程实现原理(1)轻量级进程,也有PCB,创建线程使用的底层函数和进程一样,都是clone;(2)从内核里看进程和线程是一样的,都有各自不同的PCB,但是PCB中指向内存资源的三级页原创 2021-01-26 23:16:19 · 185 阅读 · 2 评论 -
Linux信号、进程间关系pause, 时序竞态,sigsuspend
1. pause函数 --> wait for signal该函数可以造成进程主动挂起,等待信号唤醒。调用该系统调用的进程将处于阻塞状态(主动放弃CPU)直到有信号递达将其唤醒。int pause(void);返回值:pause() returns only when a signal was caught and the signal-catching function returned. In this case pause() returns -1, and errno is set原创 2021-01-21 23:30:21 · 463 阅读 · 0 评论 -
Linux系统编程之信号
1. 信号的特征:简单;不能携带大量信息;满足某个特设条件才能发送。2. 信号的机制: 进程收到信号后不管执行到程序的什么位置,都要暂停运行去处理信号,处理完毕再继续执行。与硬件中断类似,采用异步模式。但信号是软件层面上实现的中断,所以又被称作软中断。 由于信号是通过软件方法实现,其实现手段导致信号有很强的延时性,但对于用户来说这个延迟时间非常短,不易察觉。 每个进程收到的所有信号,都是由内核负责发送的,内核处理。3. 产生信号的方式:按键产生:如 Ctrl + c...原创 2021-01-20 00:31:53 · 158 阅读 · 0 评论 -
Linux系统编程之mmap
1. void* mmap(void* addr, size_t length, int prot, int flags, int fd, off_t offset);addr: 建立映射区的首地址,由Linux内核指定,使用时直接传递NULL;length:欲创建映射区的大小。prot: 映射区权限 PROT_READ, PROT_WRITE, PROT_READ | PROT_WRITEflags:标志位参数(常用于设定更新物理区域、设置共享、创建匿名映射区) MAP_SHARED: 会原创 2021-01-19 00:26:39 · 295 阅读 · 0 评论 -
Linux进程间通信IPC
1. 管道pipe (无名管道)本质是一个伪文件,实际为内核缓冲区。由两个文件描述符引用,一个表示读端,一个表示写端,数据单向流动。原理:管道实为内核使用环形队列机制,借助内核缓冲区(4K)实现。磁盘读写的单位是一个扇区,大小为512byte,即文件最小为512byte。局限性:数据自己读不能自己写;数据一旦被读走便不在管道中,不可反复读取;由于管道采用(单向)半双工通信方式,所以数据只能在一个方向上流动;只能在有公共祖先的进程间使用管道(有血缘关系)。int pipe(int pipe原创 2021-01-17 23:04:27 · 103 阅读 · 0 评论 -
Linux进程控制
1. fork函数pid_t fork(void);返回值有两个,返回子进程的pid-->父进程;返回0 --> 子进程;返回-1 --> error.原创 2021-01-16 23:26:57 · 123 阅读 · 0 评论 -
Linux系统基本概念
1. 进程相关概念: 程序:编译好的二进制文件,存在于磁盘上,不占用系统资源(CPU,内存,打开的文件、设备、锁...); 进程:是一个抽象的概念,与操作系统原理联系紧密,进程是活跃的程序,占用系统资源,程序运行起来产生一个进程。同一个程序可以被同时加载成不同的进程(彼此互不影响)。2. 时钟中断:硬件手段3. 程序运行过程:存储介质: 硬盘 --> 内存 --> cache缓存 --> 寄存器(位于CPU)CPU: 预取器 --> 译码器 --&...原创 2021-01-14 23:28:13 · 255 阅读 · 0 评论 -
C库函数
1. 文件指针 FILE*, File其实是个结构体,内部主要包括:文件描述符:整型数值,用于索引到对应的磁盘文件文件读写指针位置:I/O缓冲区,为了减少操作硬盘的次数,提高I/O效率;数据写进文件在以下几种情况:刷新缓冲区fflush;缓冲区已满;正常关闭文件:fclose, main函数return,main函数exit2. 文件描述符:在程序的虚拟地址空间的内核区,有PCB进程控制块,内部有文件描述符表(大小为1024的数组)0: stdin, 1: stdout, 2..原创 2021-01-12 23:27:52 · 159 阅读 · 0 评论 -
Linux基础
1. 目录操作:mkdir 创建单个目录mkdir - p(parent): 创建多级目录rm -r: 删除目录cp -r 复制目录2. 软/硬链接ln -s 绝对路径 : 创建文件或目录软链接,注意要用绝对路径, 保存的是文件路径ln : 创建硬链接, 不能创建目录的硬链接2. 文件查找:文件名 文件大小 文件类型find 目录 -name "文件名" : 按照名字查找find 目录 -size -10K: 查找小于10K的文件find 目录 -size +10原创 2021-01-11 00:04:10 · 124 阅读 · 0 评论