摘要:
1. 可重入与异步安全 1.1 可重入 可重入函数, 也可以称为是异步信号安全的(async-signal safe), 两者是同一个概念. 可重入函数必定是线程安全的, 而线程安全的函数却不一定可重入. 因为 只有当线程安全函数也可能被信号处理程序调用, 如果信号处理程序的调用也是安全的, 此时, 阅读全文
摘要:
Linux 系统时间和日期函数 总览 各函数之间关系 其他相关时间函数: ctime 将日期和时间转化成ASCII时间. #include <time.h> char *ctime(const time_t *timep); char *ctime_r(const time_t *timep, ch 阅读全文
摘要:
阅读全文
摘要:
通过stat()读取指定文件状态, 然后通过宏测试struct stat的st_mode成员得到文件类型. stat函数有3个版本, 它们的区别是stat参数需要一个文件路径, fstat需要一个已打开文件描述符, lstat不跟随符号链接(当文件是符号链接时, 获得符号链接自身文件状态, 而不是获 阅读全文
摘要:
1. 磁盘布局 1.1 分区 一个磁盘可分为多个分区, 每个分区须先用格式化工具(如mkfs)格式化成指定格式的文件系统, 才能用于存储文件. 磁盘文件系统布局: 1.2 块 block, 文件系统中的最小存储单位, 大小在格式化时规定 设置方式, 格式化时输入命令: $ mke2fs -b 102 阅读全文
摘要:
假设计算机要存储4byte int a = 0x12345678, 通常有2种存储方式: 大端, 和小端. 具体是哪种, 取决于计算机体系结构(硬件) 字节地址(序号) 低->高 0 1 2 3 大端 12 34 56 78 小端 78 56 34 12 上面表格都以16进制表示, 省略了"0x". 阅读全文
摘要:
概述 主要高级IO: 非阻塞IO 记录锁(文件锁) IO多路复用(I/O multiplexing) 异步IO 存储映射 高级IO,涉及到文件的IO操作,必然会用到文件描述符(fd),而且依赖于fcntl函数支持。 非阻塞IO 阻塞读文件 当读某些文件时,如果文件没有数据,会导致读操作阻塞,如: 读 阅读全文
摘要:
vimrc 普通用户只有只读权限,修改需要取得root权限。 $ sudo vim /etc/vim/vimrc 在vimrc文件末尾添加 set ts=4 # 等价于tabstop=4,将一个\t等价替换为4个空格 set softtabstop=4 # insert模式下,按下tab键后所产生的 阅读全文
摘要:
动态规划算法基本概念 动态规划算法的2个基本要素:最优子结构和子问题重叠。 最优子结构 应用动态规划算法第一步:刻画最优解的结构。当问题的最优解包含其子问题的最优解时,称该问题具有最优子结构性质。反过来说,可以利用子问题的最优解推导出问题的最优解。 通常,利用子问题的最优子结构性质,以自底向上的方式 阅读全文
摘要:
题目 编写一个程序,通过填充空格来解决数独问题。 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图) 数独部分空格内已填入了数字,空白格用 '.' 表示。 示例: 阅读全文
摘要:
题目 正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。 输入描述: 输入两个正整数A和B。 输出描述: 输出A和B的最小公倍数。 示例 输入 5 7 输出 35 解析 最小公倍数:2个整数公有的倍数叫这2个数的公倍数,其中最小的公倍数叫最 阅读全文
摘要:
nothrow __nothrow__属性告诉编译器函数不能抛出异常。 The nothrow attribute is used to inform the compiler that a function cannot throw an exception. For example, most 阅读全文
摘要:
无名管道(PIPE)和有名管道(FIFO)都是UNIX进程间通信(InterProcess Communication,简称IPC)的手段。 无名管道PIPE 管道特点 管道通常指无名管道,是IPC最古老的形式。管道有何特点? 半双工通信,具有固定的读端、写端(单向传输数据); 管道只能在具有公共祖 阅读全文
摘要:
预备知识 socket概念 socket可以表示很多概念: 在TCP/IP协议中,“IP地址 + TCP/UDP端口号”唯一标识网络通讯中的一个进程,“IP地址+端口号”称为socket。 在TCP协议中,建立连接的2个进程各自有一个socket来标识,那么这两个socket组成的socket pa 阅读全文
摘要:
TCP/IP协议栈与数据包封装 TCP/IP协议栈分为4层:应用层Application、传输层Transport、网络层Network、链路层Link。 两台PC通过TCP/IP协议通讯过程示意图: 每一层协议协议作为数据,到下一层协议都要加一个数据首部(header),称为封装(Encapsul 阅读全文
摘要:
线程的概念 线程是操作系统能够进行运算调度的最小单位,包含在进程中,是进程实际运作单位。 线程共享资源: 文件描述符 每种信号的处理方式(SIG_IGN/SIG_DFL or 自定义信号 处理函数) 当前工作目录 用户id和组id 每个线程各有一份的资源: 线程id 上下文,包括各种寄存器的值/PC 阅读全文
摘要:
终端 终端的基本概念 每个进程都可以通过一个特殊设备文件/dev/tty访问它的控制终端,每个终端设备都对应一个不同的设备文件,/dev/tty 提供了一个通用的接口,一个进程要访问它的控制终端即可以通过/dev/tty,也可以通过该终端设备所对应的设备文件来访问。 ttyname函数可以由文件描述 阅读全文
摘要:
信号的基本概念 终端启动前台进程后,按Ctrl-C执行过程: 用户输入命令,shell启动前台进程 `$ ./a.out'; 用户按下Ctrl-C,产生硬件中断; 如果CPU正在执行该进程代码,则该进程的用户空间代码暂停执行,CPU从用户态切换到内核态处理硬件中断; 终端驱动程序将Ctrl-C解释成 阅读全文
摘要:
Shell简介 shell用于解释执行用户的命令。 shell 2种执行方式: 用户输入一条,解释执行一条; 事先写一个shell脚本,包含多条命令,shell一次执行完毕,这种方式也叫批处理(batch); shell的多个版本: sh(Bourne Shell):Steve Bourne开发,各 阅读全文
摘要:
-o选项 编译并链接,生成可执行程序 $ gcc main.c -o main # 编译main.c,链接后生成可执行程序main -c选项 只编译,不链接 $ gcc -c main.c # 生成main.o目标文件 -g选项 编译、链接生成可执行程序,可执行程序包含调试信息。可以用于GDB调试。 阅读全文