作业控制命令 Linux 中的作业控制涉及到很多命令,现总结如下。 * jobs:列出所有正在后台运行的作业(不如 ps 命令常用)。这里要注意区分作业和进程的概念。一般作业是被当前 shell 所维护的,而进程则是被系统维护的。一些命令(如 kill、disown 和 wait 等)既可以接受作业号为参数,也可以接受进程号为参数,而另一些命令(如 fg、bg 和 jobs 等)则只能接受作业...
作业控制命令 Linux 中的作业控制涉及到很多命令,现总结如下。 * jobs:列出所有正在后台运行的作业(不如 ps 命令常用)。这里要注意区分作业和进程的概念。一般作业是被当前 shell 所维护的,而进程则是被系统维护的。一些命令(如 kill、disown 和 wait 等)既可以接受作业号为参数,也可以接受进程号为参数,而另一些命令(如 fg、bg 和 jobs 等)则只能接受作业...
[转载]理解goroutine 本文讲解了进程、线程和协程之间的区别,并详细讲解了 Golang 中的协程 goroutine 的实现方式,是一篇不错的博文,值得收藏:[url]https://blog.csdn.net/justaipanda/article/details/44064811[/url]。...
跳跃表在 Redis 中的应用 前提申明,因篇幅有限,本文只介绍跳跃表在 Redis 中的应用,而关于跳跃表的原理性介绍,还请参考其他相关书籍,或参考博文[url=https://blog.csdn.net/u014427196/article/details/52454462]跳跃表 SkipList【数据结构】原理及实现[/url]。 跳跃表是一种有序数据结构,它实现了同二分查找一样的平均 O(logN)、...
跳跃表在 Redis 中的应用 前提申明,因篇幅有限,本文只介绍跳跃表在 Redis 中的应用,而关于跳跃表的原理性介绍,还请参考其他相关书籍,或参考博文[url=https://blog.csdn.net/u014427196/article/details/52454462]跳跃表 SkipList【数据结构】原理及实现[/url]。 跳跃表是一种有序数据结构,它实现了同二分查找一样的平均 O(logN)、...
字典实现 字典在 Redis 中的应用相当广泛,如 Redis 的数据库、Hash 类型等的底层实现都用到了字典。 Redis 的字典使用了哈希表,其中可以包含多个哈希表节点,每个节点就保存了字典中的一个键值对。这两者的结构定义分别如下:[code="C"]typedef struct dictht{ dictEntry **table; // 哈希表节点...
redis 字符串和列表实现 Redis 虽说由 C 语言实现,但用户直接操作的字符串绝大多数情况下均非 C 语言中以空字符结尾的字符串,而是一种封装了 C 字符串的称作简单动态字符串(simple dynamic string, SDS)的抽象结构,并将其作为 Redis 的默认字符串表示。 SDS 结构的定义如下:[code="C"]struct sdshdr{ int len; ...
字符串操作 Bash 所支持的字符串操作的方式多种多样,现记录如下。 1、获取字符串长度: 1)${#string} (“${#*}”和“${#@}”表示的是位置参数的个数。另外,对于数组 arr 而言,“${#arr}”表示的是数组中第一个元素的长度,“${#arr[@]}”和“${#arr[* ]}”表示的是数组中元素的个数) 2) expr length $stri...
内部变量简介 shell 中有很多[color=red]内建[/color]变量,它们会影响到 shell 脚本的行为,所以也有必要知道。 * BASH:表示 Bash 的二进制程序文件的路径。 * BASH_ENV:它会指向一个 Bash 的启动文件,该文件会在一个脚本被调用时读取。 * BASH_SUBSHELL:用来提示子 shell 的层次。 * BASH...
打开伪终端设备 在[url=http://aisxyz.iteye.com/admin/blogs/2423960]伪终端概述[/url]一节中已对 PTY进行了初步的介绍。尽管 PTY 表现得就像物理终端设备一样,不过在打开 PTY 设备文件时,应用程序并不需要设置 O_TTY_INIT 标识(见[url=http://aisxyz.iteye.com/admin/blogs/2370533]不带缓冲的...
常忘记的特殊字符 shell 中有很多特殊字符,比如表示转义的“\”、表示命令替换的“`”等,其中有些用得少了就很容易忘记,包括某个字符或是某个功能等的用法。以下是本人自己的备忘录,仅供参考。 1、“:”(冒号):等价于"no op",是一个什么也不干的命令, 同shell 内建命令 true 的作用相同。可用来作命令占位符。具体用法如下。[code="bash"]# 1)用在循环中w...
伪终端概述 伪终端就是指,一个应用程序看上去像一个终端,但事实上它并不是个真正的终端。下图显示了使用伪终端时相关进程的典型安排。[img]http://dl2.iteye.com/upload/attachment/0129/9523/81165c3d-0144-3e08-bb9d-dc8a16b4ccc9.png[/img] 图中的关键点如下。 1、通常,一个进程打开伪终端主...
终端窗口大小和 termcap 多数 UNIX 系统都提供了一种跟踪当前终端窗口大小的方法。在窗口大小发生变化时,内核就会通知前台进程组。内核为每个终端和伪终端都维护了一个如下的 winsize 结构。[code="c"]struct winsize{ unsigned short ws_row; // rows, in characters unsigned short ws_...
终端规范模式和非规范模式 终端规范模式很简单:发一个读请求,当一行已经输入后,终端驱动程序立即返回。以下几个条件都会造成读返回。 1、所请求的字节数已读到时。此时无需读一个完整的行,如果读了部分行,也不会丢失任何信息,下一次读会从前一次读的停止处开始。 2、当读到一个行定界符时。在[url=http://aisxyz.iteye.com/admin/blogs/2422413]终端特殊输入字符[...
终端标识 尽管控制终端的名字在多数 UNIX 系统上都是 /dev/tty,不过为了可移植性,POSIX.1 还是提供了一个可用来确定控制终端名字的运行时函数 ctermid。[code="c"]#include char *ctermid(char *ptr); /* 返回值:若成功,返回指向终端名的指针;否则,返回指向空字符串的指针 */[/code]...
波特率和行控制函数 虽然大多数终端设备对输入和输出都使用同一波特率(即“位/秒”),但只要硬件允许,就可以使用下面 4 个函数将它们设置为不同的值。[code="c"]#include speed_t cfgetispeed(const struct termios *termptr);speed_t cfgetospeed(const struct termios *termptr); ...
终端属性和选项标志 tcgetattr 和 tcsetattr 函数可以分别获取和设置 termios 结构,这样就可以检测和修改各种终端选项标志和特殊字符。[code="c"]#include int tcgetattr(int fd, struct termios *termptr);int tcsetattr(int fd, int opt, const struct termios *...
终端特殊输入字符 终端支持下表所示的特殊输入字符。[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...
终端 I/O 综述 终端设备可认为是由内核中的终端驱动程序控制的。每个终端设备都有一个输入队列和输出队列。如下图所示。[img]http://dl2.iteye.com/upload/attachment/0129/7795/19e52b16-e753-3d06-bec0-6e0595a59047.png[/img] 对该图要说明以下几点: 1)如果打开了回显功能,则在输入队列和输出队...
POSIX 信号量 在[url=http://aisxyz.iteye.com/admin/blogs/2418777]XSI IPC通信之信号量[/url]一节中提到了 XSI 标准的信号量。POSIX 信号量意在解决 XSI 信号量的以下几个缺陷。 1)POSIX 信号量考虑到了更高性能的实现。 2)POSIX 信号量接口使用更简单:没有信号量集。 3)POSIX 信号量在删...