- 博客(160)
- 收藏
- 关注
原创 作业控制命令
Linux 中的作业控制涉及到很多命令,现总结如下。 * jobs:列出所有正在后台运行的作业(不如 ps 命令常用)。这里要注意区分作业和进程的概念。一般作业是被当前 shell 所维护的,而进程则是被系统维护的。一些命令(如 kill、disown 和 wait 等)既可以接受作业号为参数,也可以接受进程号为参数,而另一些命令(如 fg、bg 和 jobs 等)则只能接受作业...
2018-09-29 06:42:54
742
原创 [转载]理解goroutine
本文讲解了进程、线程和协程之间的区别,并详细讲解了 Golang 中的协程 goroutine 的实现方式,是一篇不错的博文,值得收藏:[url]https://blog.csdn.net/justaipanda/article/details/44064811[/url]。...
2018-09-18 07:29:40
261
原创 跳跃表在 Redis 中的应用
前提申明,因篇幅有限,本文只介绍跳跃表在 Redis 中的应用,而关于跳跃表的原理性介绍,还请参考其他相关书籍,或参考博文[url=https://blog.csdn.net/u014427196/article/details/52454462]跳跃表 SkipList【数据结构】原理及实现[/url]。 跳跃表是一种有序数据结构,它实现了同二分查找一样的平均 O(logN)、...
2018-08-23 16:30:13
1032
原创 字典实现
字典在 Redis 中的应用相当广泛,如 Redis 的数据库、Hash 类型等的底层实现都用到了字典。 Redis 的字典使用了哈希表,其中可以包含多个哈希表节点,每个节点就保存了字典中的一个键值对。这两者的结构定义分别如下:[code="C"]typedef struct dictht{ dictEntry **table; // 哈希表节点...
2018-08-20 15:49:43
359
原创 redis 字符串和列表实现
Redis 虽说由 C 语言实现,但用户直接操作的字符串绝大多数情况下均非 C 语言中以空字符结尾的字符串,而是一种封装了 C 字符串的称作简单动态字符串(simple dynamic string, SDS)的抽象结构,并将其作为 Redis 的默认字符串表示。 SDS 结构的定义如下:[code="C"]struct sdshdr{ int len; ...
2018-08-08 16:41:49
324
原创 字符串操作
Bash 所支持的字符串操作的方式多种多样,现记录如下。 1、获取字符串长度: 1)${#string} (“${#*}”和“${#@}”表示的是位置参数的个数。另外,对于数组 arr 而言,“${#arr}”表示的是数组中第一个元素的长度,“${#arr[@]}”和“${#arr[* ]}”表示的是数组中元素的个数) 2) expr length $stri...
2018-07-30 22:14:44
138
原创 内部变量简介
shell 中有很多[color=red]内建[/color]变量,它们会影响到 shell 脚本的行为,所以也有必要知道。 * BASH:表示 Bash 的二进制程序文件的路径。 * BASH_ENV:它会指向一个 Bash 的启动文件,该文件会在一个脚本被调用时读取。 * BASH_SUBSHELL:用来提示子 shell 的层次。 * BASH...
2018-07-24 20:55:36
868
原创 打开伪终端设备
在[url=http://aisxyz.iteye.com/admin/blogs/2423960]伪终端概述[/url]一节中已对 PTY进行了初步的介绍。尽管 PTY 表现得就像物理终端设备一样,不过在打开 PTY 设备文件时,应用程序并不需要设置 O_TTY_INIT 标识(见[url=http://aisxyz.iteye.com/admin/blogs/2370533]不带缓冲的...
2018-07-09 20:50:01
305
原创 常忘记的特殊字符
shell 中有很多特殊字符,比如表示转义的“\”、表示命令替换的“`”等,其中有些用得少了就很容易忘记,包括某个字符或是某个功能等的用法。以下是本人自己的备忘录,仅供参考。 1、“:”(冒号):等价于"no op",是一个什么也不干的命令, 同shell 内建命令 true 的作用相同。可用来作命令占位符。具体用法如下。[code="bash"]# 1)用在循环中w...
2018-07-03 22:03:28
402
原创 伪终端概述
伪终端就是指,一个应用程序看上去像一个终端,但事实上它并不是个真正的终端。下图显示了使用伪终端时相关进程的典型安排。[img]http://dl2.iteye.com/upload/attachment/0129/9523/81165c3d-0144-3e08-bb9d-dc8a16b4ccc9.png[/img] 图中的关键点如下。 1、通常,一个进程打开伪终端主...
2018-06-02 11:05:19
1223
原创 终端窗口大小和 termcap
多数 UNIX 系统都提供了一种跟踪当前终端窗口大小的方法。在窗口大小发生变化时,内核就会通知前台进程组。内核为每个终端和伪终端都维护了一个如下的 winsize 结构。[code="c"]struct winsize{ unsigned short ws_row; // rows, in characters unsigned short ws_...
2018-05-29 22:39:52
1015
原创 终端规范模式和非规范模式
终端规范模式很简单:发一个读请求,当一行已经输入后,终端驱动程序立即返回。以下几个条件都会造成读返回。 1、所请求的字节数已读到时。此时无需读一个完整的行,如果读了部分行,也不会丢失任何信息,下一次读会从前一次读的停止处开始。 2、当读到一个行定界符时。在[url=http://aisxyz.iteye.com/admin/blogs/2422413]终端特殊输入字符[...
2018-05-29 00:25:22
1470
原创 终端标识
尽管控制终端的名字在多数 UNIX 系统上都是 /dev/tty,不过为了可移植性,POSIX.1 还是提供了一个可用来确定控制终端名字的运行时函数 ctermid。[code="c"]#include char *ctermid(char *ptr); /* 返回值:若成功,返回指向终端名的指针;否则,返回指向空字符串的指针 */[/code]...
2018-05-23 11:18:57
1430
原创 波特率和行控制函数
虽然大多数终端设备对输入和输出都使用同一波特率(即“位/秒”),但只要硬件允许,就可以使用下面 4 个函数将它们设置为不同的值。[code="c"]#include speed_t cfgetispeed(const struct termios *termptr);speed_t cfgetospeed(const struct termios *termptr); ...
2018-05-22 07:53:20
398
原创 终端属性和选项标志
tcgetattr 和 tcsetattr 函数可以分别获取和设置 termios 结构,这样就可以检测和修改各种终端选项标志和特殊字符。[code="c"]#include int tcgetattr(int fd, struct termios *termptr);int tcsetattr(int fd, int opt, const struct termios *...
2018-05-20 07:40:56
651
原创 终端特殊输入字符
终端支持下表所示的特殊输入字符。[img]http://dl2.iteye.com/upload/attachment/0129/7813/8d8e24f5-a84a-3c1e-836c-911bc74a8b9b.png[/img][img]http://dl2.iteye.com/upload/attachment/0129/7815/fa5e28a3-1c44-3ffc-b05...
2018-05-17 06:33:29
1091
原创 终端 I/O 综述
终端设备可认为是由内核中的终端驱动程序控制的。每个终端设备都有一个输入队列和输出队列。如下图所示。[img]http://dl2.iteye.com/upload/attachment/0129/7795/19e52b16-e753-3d06-bec0-6e0595a59047.png[/img] 对该图要说明以下几点: 1)如果打开了回显功能,则在输入队列和输出队...
2018-05-10 07:56:14
186
原创 POSIX 信号量
在[url=http://aisxyz.iteye.com/admin/blogs/2418777]XSI IPC通信之信号量[/url]一节中提到了 XSI 标准的信号量。POSIX 信号量意在解决 XSI 信号量的以下几个缺陷。 1)POSIX 信号量考虑到了更高性能的实现。 2)POSIX 信号量接口使用更简单:没有信号量集。 3)POSIX 信号量在删...
2018-05-09 00:03:21
243
原创 XSI IPC 通信之共享存储
在[url=http://aisxyz.iteye.com/admin/blogs/2418648]XSI IPC通信之消息队列[/url]和[url=http://aisxyz.iteye.com/admin/blogs/2418777]XSI IPC通信之信号量[/url]两节中,我们讨论了消息队列和信号量,这一节将继续讨论同属于 XSI IPC 的存储共享。 共享存储允许多...
2018-04-25 07:18:40
299
原创 XSI IPC通信之信号量
在[url=http://aisxyz.iteye.com/admin/blogs/2418648]XSI IPC通信之消息队列[/url]一节中我们介绍了消息队列,对比消息队列,本文将介绍信号量的一些常用操作。 信号量与管道、FIFO以及消息队列等IPC机制不同,它是一个用于为多进程提供对共享数据对象的访问的计数器。为了获得共享资源,进程需要执行下列操作。 (1)测试...
2018-04-17 23:38:57
274
原创 XSI IPC通信之消息队列
消息队列是消息的链接表,存储在内核中,由消息队列标识符(或称为队列ID)标识。 下表列出了影响消息队列的系统限制。其中“导出的”表示这种限制来源于其他限制。比如 Linux 系统中的最大消息数是根据最大队列数和队列中所允许的最大数据量来决定的,最大队列数又受 RAM 数量多少的影响,队列的最大字节数限制进一步限制了队列中将要存储的消息的最大长度。[img]http://dl2...
2018-04-15 10:54:28
165
原创 shell 判断条件总结(转载)
一篇详细总结了 shell 中各种判断条件的博客,值得珍藏,见[url=https://www.cnblogs.com/f-ck-need-u/p/7427357.html]shell测试命令[/url]。
2018-03-13 19:49:06
120
原创 [转载] 反射的规则
一篇十分到位地详细介绍了 golang 中反射机制的文章,果断 mark 了[url=https://mikespook.com/2011/09/%E5%8F%8D%E5%B0%84%E7%9A%84%E8%A7%84%E5%88%99/][翻译]反射的规则[/url]。...
2018-02-28 00:37:15
132
原创 XSI IPC 相似特征介绍
有 3 种称作 XSI IPC 的 IPC:消息队列、信号量以及共享存储器,本节先介绍它们相类似的特征,后面再分别说明它们各自的特殊功能(XSI IPC 没有使用文件系统命名空间,而是构造了它们自己的命名空间,为此也受到了一些批评)。 (一)标识符和键 这三种 IPC 结构在内核中都用一个非负整数的标识符加以引用。例如,要向一个消息队列发送消息或者从其中取消息,只需要知...
2018-02-08 23:48:49
168
原创 SCTP 事件通知
SCTP 提供了多种可用的通知,用户可经由这些通知追踪相关关联的状态。通知传递的是传输级的事件,包括网络状态变动、关联启动、远程操作错误以及消息不可递送。不论是一到一式还是一到多式接口,默认情况下除 sctp_data_io_event 外的所有事件都是禁止的。 使用[url=http://aisxyz.iteye.com/admin/blogs/2408978]SCTP 套接字...
2018-02-08 03:49:15
2448
原创 IPC 通信之 FIFO
FIFO 也被称为命名管道,未命名的管道只能在两个相关的进程之间使用,而且这两个相关的进程还要有一个共同的创建了它们的祖先进程。而通过 FIFO,即使不相关的进程也能交换数据。 FIFO 是一种文件类型,通过 stat 结构的 st_mode 成员可以知道文件是否是 FIFO 类型,可以用 S_ISFIFO 宏对此进行测试。创建 FIFO 类似于创建文件,它的路径名也的确存在与文...
2018-02-06 22:55:51
260
原创 SCTP 套接字编程基础函数
SCTP 服务器可以使用 sctp_bindx 函数捆绑与所在主机系统相关 IP 地址的一个子集,而 TCP 服务器和 UDP 服务器要么捆绑所在主机的某个地址,要么捆绑所有地址,而不能捆绑这些地址的一个子集。[code="c"]#include int sctp_bindx(int sockfd, const struct sockaddr *addrs, int addrc...
2018-02-04 10:08:15
565
原创 SCTP 套接字选项
在[url=http://aisxyz.iteye.com/admin/blogs/2405269]获取和设置套接字选项[/url]一节中,我们了解到 SCTP 套接字支持多个选项,接下来就将对其一一介绍。 ** SCTP_ADAPTION_LAYER 在关联初始化期间,任何一个端点都可能指定一个适配层指示,该指示是一个 32 位的无符号整数,可由两端的应用进程用来协调...
2018-02-04 09:35:06
1922
原创 IPC 通信之管道
管道是 UNIX 系统 IPC 的最古老但也是最常用的形式,其有以下两种局限性。 (1)历史上,管道是半双工的(即数据只能在一个方向上流动),不过现在有些系统也提供全双工管道。但为了移植性,不应预先假定系统支持全双工管道。 (2)管道只能在具有公共祖先的两个进程之间使用。通常,一个管道由一个进程创建,在进程调用 fork 之后,该管道就能在父进程和子进程之间使用了。...
2018-01-30 22:22:36
125
原创 readv/writev 函数及存储映射 I/O
readv 和 writev 函数可用于在一次函数调用中读、写多个非连续缓冲区,有时也称这两个函数为散布读(scatter read)和聚集写(gather write)。[code="c"]#include ssize_t readv(int fd, const struct iovec *iov, int iovcnt);ssize_t writev(int fd, c...
2018-01-19 00:57:02
386
原创 SCTP 套接字编程基础概念
SCTP 套接字分为一到一套接字和一到多套接字。提供一到一形式的目的是为了方便将现有 TCP 应用程序移植到 SCTP 上,其交互方式类似于 TCP 套接字,只是其建立连接时需要经过四路握手。一到一式 SCTP 套接字是一个类型为 SOCK_STREAM,协议为 IPPROTO_SCTP 的网际网套接字(即协议族为 AF_INET 或 AF_INET6),而一到多式 SCTP 套接字是一个...
2018-01-18 00:10:34
609
1
原创 POSIX 异步 I/O
POSIX 异步 I/O 接口为对不同类型的文件进行异步 I/O 提供了一套一致的方法。这些接口使用 AIO 控制块来描述 I/O 操作。aiocb 结构定义了 AIO 控制块,该结构至少包括下面这些字段:[code="c"]#include struct aiocb{ int aio_fildes; // file descript...
2018-01-16 21:33:15
416
原创 UDP套接字编程基础
下图显示了使用 UDP 套接字编写客户/服务器程序时的大致流程。[img]http://dl2.iteye.com/upload/attachment/0128/4350/7b0fbb0a-8dc4-390f-8c00-a5b04131aeb4.png[/img] UDP 中的客户不需要与服务器建立连接,而是采用 sendto 和 recvfrom 函数来发送和接收数据。...
2018-01-14 10:37:10
252
原创 原型模式
每个函数都有一个 prototype 属性,它指向一个对象,该对象的用途是包含可以由特定类型的所有实例共享的属性和方法。按照字面意思来理解,那个 prototype 就是通过调用构造函数而创建的那个对象实例的原型对象。使用原型对象可以让所有对象实例共享它所包含的属性和方法,而不必在构造函数中定义对象实例的信息,如下面的例子所示。[code="javascript"]function...
2018-01-09 16:23:18
87
原创 守护进程惯例
UNIX 系统中,守护进程遵循下列通用惯例。 (1)若守护进程使用锁文件,则该文件通常存储在 /var/run 目录中。不过守护进程可能需要具有超级用户权限才能在此目录下创建文件。锁文件的名字通常是 name.pid,其中,name 是该守护进程或服务的名字。例如,cron 守护进程锁文件的名字是 /var/run/crond.pid。 (2)若守护进程支持配置选项,则...
2018-01-06 23:52:26
173
原创 fcntl 记录锁
记录锁的功能是:当有进程正在读或修改文件的某个部分时,用以阻止其他进程修改同一文件区。下表列出了各种系统提供的不同形式的记录锁。[img]http://dl2.iteye.com/upload/attachment/0128/3567/82cfe7ba-34be-387c-91be-3a6f2f68b6bb.png[/img] 本文只介绍 POSIX.1 标准的 fcntl ...
2018-01-06 23:48:32
150
原创 通用套接字选项
在[url=http://aisxyz.iteye.com/admin/blogs/2405269]获取和设置套接字选项[/url]一节中对可获取和设置的套接字选项进行了简单描述,这一节将对其中的通用套接字选项作更深入的介绍。既然是“通用”,那就表明这些选项是协议无关的(不过其中有些选项只能应用到某些特定类型的套接字中,比如 SO_BROADCAST 只能应用于数据报套接字)。 ...
2018-01-02 00:46:35
325
原创 属性类型
ECMAScript 中有两种属性类型:数据属性和访问器属性。 一、数据属性 数据属性包含一个数据值的位置,在这个位置可以读取和写入值。它有 4 个描述其行为的特性。 (1)configurable:表示能否通过 delete 删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性,默认为 true。 (2)enumerable...
2017-12-30 08:53:31
322
原创 查询执行路径
当希望 MySQL 能够以更高的性能进行查询时,最好的办法就是弄清楚 MySQL 是如何进行优化和查询的。一旦理解这一点,很多查询优化工作实际上就是遵循一些原则让优化器能够按照预想的合理的方式运行。 下图显示了 MySQL 如何处理一个用户请求的过程。[img]http://dl2.iteye.com/upload/attachment/0128/2632/e9ad19a3-...
2017-12-30 08:52:23
229
原创 获取和设置套接字选项
下面几种方法可用来获取和设置影响套接字的选项: (1)getsockopt 和 setsockopt 函数; (2)fcntl 函数; (3)ioctl 函数。 本文将介绍 getsockopt 和 setsockopt 函数,对 fcntl 的介绍见[url=http://aisxyz.iteye.com/admin/blogs/2378902]f...
2017-12-29 08:21:12
694
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人