随笔分类 - Linux
Linux 编程,普通操作知识
摘要:使用aio的时候, 出现编译问题: 对‘aio_read’未定义的引用( undefined reference to 'aio_read' ). 要如何解决 ? 确认已经include头文件 aio.h; 编译的时候, 链接librt库, 命令: $ gcc async_demo.c -lrt 选
阅读全文
摘要:1.select和poll IO多路转换技术, select, poll的原理是: 通过将待监听文件描述符(fd)加入集合, 然后通过查询其调用返回值, 取得数据有动静的fd数量, 再轮询集合中每个fd, 如果有数据, 就直接读取; 如果没有数据, 就等待下一次查询. select和poll实现了异
阅读全文
摘要:通过gethostname + getaddrinfo , 得到本机ip地址为127.0.1.1 , 而非127.0.0.1. 为何? 源代码 来源: Linux编程获取本机IP地址的几种方法 int main(int argc, const char **argv) { int ret; char
阅读全文
摘要:文件截断, 指的是将文件内容分成两半, 只保留需要的文件长度的那部分. 通常, 将文件长度截断为0. 文件截断方式: 1. 使用系统调用open/fopen O_TRUNC截断 open截断文件, 会清空文件已有内容, 即保留长度为0. 指定O_TRUNC标识时, 文件必须可写方式(如O_RDWR,
阅读全文
摘要:1. 守护进程创建步骤 守护进程是没有终端的进程, 运行在后台, 常在系统引导时启动. 那么如何创建守护进程呢? 参照APUE 13.3, 创建守护进程步骤: 调用umask设置进程创建文件的权限屏蔽字(umask), 便于守护进程创建文件 umask通常设为0, 如果调用库函数创建文件, 可设置为
阅读全文
摘要:守护进程 没有控制终端, 运行在后台的特殊进程, 用于执行特定的系统任务, 这样的进程称为守护进程. 守护进程长期生存, 常在系统引导时装入启动. 一般的网络服务, 都是以守护进程形式存在提供服务. 用户层守护进程的父进程是init进程(pid = 1). 守护进程查看方式: 基于BSD的系统, 执
阅读全文
摘要: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
阅读全文
摘要:概述 主要高级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键后所产生的
阅读全文
摘要:无名管道(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解释成
阅读全文