
Linux环境编程
媳妇控
linuxer
展开
-
显式运行时加载
相比在编译期间显式链接,运行前隐式加载的方式,运行时显式链接并加载的方式显然更加灵活。这种方式可以控制程序在需要时加载指定模块,甚至可以在不需要时卸载,从而减少程序启动时间和内存消耗,以及实现热更新这种功能。linux上提供了以下4个api来支持共享对象的显式运行时访问void *dlopen(const char *filename, int flags) 加载一个共享对象, 同一...原创 2020-01-19 23:43:25 · 989 阅读 · 0 评论 -
unix环境高级编程(中文第三版)堪误
[1]. 207页,错误语句“它调用setuid函数把有效用户ID设置为实际用户ID”,正确的应该是“它调用seteuid函数把有效用户ID设置为实际用户ID”(如果有发现,持续更新中)原创 2017-03-29 17:59:02 · 1860 阅读 · 0 评论 -
APUE之I/O多路复用
I/O多路复用有3种具体实现模型:select、poll和epoll/* int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout) * @nfds 要监听的最大描述符编号加1,select支持的最大描述符编号为FD_SETSIZE(通常是10...原创 2018-03-07 15:34:40 · 281 阅读 · 0 评论 -
APUE之非阻塞I/O
I/O操作(比如open、read、write、send、recv等)默认都工作在阻塞模式,意味着调用时有可能会使进程永远阻塞;而处于非阻塞模式的I/O操作如果不能完成,则调用立即出错返回。备注:这里需要注意的一点是,针对磁盘的I/O操作(无锁情况下)不会引发进程永远阻塞,比如read磁盘中的一个空文件时就是直接返回0。 也可以理解为,针对磁盘的I/O操作不存在阻塞/非阻塞概念有两类方法...原创 2018-02-20 22:32:32 · 274 阅读 · 0 评论 -
APUE之异步信号安全和线程安全
1. 异步信号安全函数又被称为可重入函数,其定义源自单线程环境: 如果一个函数可以在执行期间的任意时刻被中断,并且可以在中断服务程序中再次被安全调用,以及在中断退出后还可以继续正确执行完函数的剩下部分内容,就称该函数为可重入函数。 1.1. 常用的可重入函数主要可以分为以下几类: [1]. 所有套接字API,包括socket、connect、bind、acc...原创 2018-01-21 19:52:12 · 1372 阅读 · 0 评论 -
APUE之记录锁
记录锁提供的功能: 当第一个进程正在访问文件的某个部分时,使用记录锁可以限制其他进程访问同一文件区的行为 这里需要注意一点,记录锁支持锁定文件的一个区域(当然也可以是整个文件)fcntl记录锁接口格式: int fcntl(int fd,int cmd,struct flock *flockptr) @fd - 要设置记录锁...原创 2018-06-25 19:48:31 · 232 阅读 · 0 评论 -
linux下原始套接字编程
1. 面向IP层的原始套接字编程----------------------------------------------------------------------------------------------------------------------------- socket(AF_INET,SOCK_RAW,protocol) [1]. protocol字段...原创 2017-03-13 19:35:51 · 2958 阅读 · 0 评论 -
linux网络编程几个基础性知识点
1. 主机字节序、网络字节序--------------------------------------------------------------------------------------------------- 主机字节序通常采用little-endian,低字节放低地址,高字节放高地址 网络字节序采用big-endian,低字节放高地址,高字节放低地址 ...原创 2017-03-07 14:23:39 · 853 阅读 · 0 评论 -
socket编程中IO函数
-------------------------------------------------------------------------------------------------------------------------+ ssize_t send(int sockfd,const void *buf,size_t len,int flags) ...原创 2017-03-02 09:58:15 · 903 阅读 · 0 评论 -
APUE之mmap机制
mmap(memery-mapped I/O)可以将一个文件或其他对象(比如一段匿名内存)映射到进程的虚拟地址空间。mmap技术的用途主要有以下两个方面: [1]. 将一个文件映射到进程的虚拟地址空间后,进程就可以直接访问这段虚拟地址来进行文件的I/O操作,而不再需要使用read、write等系统调用 [2]. 多个进程可以通过映射同一个文件实现共享内存,来作为进程间的一种IPC...原创 2018-07-31 08:21:31 · 599 阅读 · 0 评论 -
APUE之进程笔记(下)
1. 进程组 进程组是一个或多个进程的集合,同一进程中的各进程接收来自同一终端的各种信号。 每个进程组都有一个组长进程,组长进程ID就是该进程组ID。 只要进程组中有一个进程存在,该进程组就存在(跟组长进程是否提前终止无关)。 /* API : pid_t getpgrp(void) * 描述 : 返回调用进程的进程组ID */ /* API : ...原创 2017-11-13 09:10:27 · 274 阅读 · 0 评论 -
APUE之信号
1. 信号的本质 信号是在软件层次上对中断机制的一种模拟,是IPC机制中唯一的异步通信机制. 进程本身是无法直接处理信号的,而是必须事先将处理方式告诉内核,处理方式可以分为三种: [1]. 忽略此信号 [2]. 捕捉信号。这种方式需要用户提供一个相应的信号处理函数 [3]. 执行该信号的默认动作。默认动作主要有:忽略原创 2017-10-24 19:31:25 · 388 阅读 · 0 评论 -
APUE笔记之文件属性相关
-----------------------------------------------------------------------------------------------------------------------stat结构包含了一个文件有关的所有信息struct stat { mode_t st_mode; // 文件类型 | set-user-ID/s...原创 2017-02-15 10:26:46 · 313 阅读 · 0 评论 -
APUE笔记之系统数据文件
1. 口令文件(/etc/passwd 644) 口令文件记录了linux用户账户以及相关信息(密码除外),每一行中各字段定义如下: struct passwd { char *pw_name; // 用户名 char *pw_passwd;// 加密口令 __uid_t pw_uid; // 用户ID原创 2017-04-26 16:16:25 · 398 阅读 · 0 评论 -
APUE之进程笔记(上)
进程环境----------------------------------------------------------------------------------------------------1. 环境变量 每个进程在被创建的时候都会收到一张命令行参数表和一张环境变量表,通常两张表都位于本进程存储空间的顶部(栈之上) 获取环境变量的方法:原创 2017-06-14 16:18:01 · 384 阅读 · 0 评论 -
APUE之线程属性
1. 多线程的优势: [1]. 通过合理的分配任务到多个线程,每个线程在进行事件处理时可以采用同步编程模式,相比异步编程,同步编程简单方便很多 [2]. 多个进程间进行数据交互必须通过各种IPC机制,而同一个进程下的多个线程间共享同一片地址空间,数据可以直接交互 [3]. 通过合理的分配任务到多个线程,可以改善整个程序的响应时间和并发性能,即便是运行在单核CP原创 2017-08-07 23:30:01 · 336 阅读 · 0 评论 -
APUE之线程创建与终止
1. 线程ID(pthread_t) 类似于进程ID的定义,线程ID用于在所在进程中唯一标识一个线程,虽然在linux中使用无符号长整型表示pthread_t,但不建议在实际操作中直接当作整数处理 /* API : int pthread_equal(pthread_t tid1,pthread_t tid2) * 描述 : 用来比较两个线程ID,相等返回原创 2017-08-09 23:00:10 · 276 阅读 · 0 评论 -
APUE之线程同步
1. 互斥量(pthread_mutex_t) 使用互斥量之前,必须先对它进行初始化,初始化互斥量的方式有以下2种: [1]. 对于静态分配的互斥量通常在定义时就可以直接设置为常量PTHREAD_MUTEX_INITIALIZER [2]. 对于动态分配的互斥量通常调用pthread_mutex_init进行初始化 /* API : i原创 2017-09-20 09:58:10 · 442 阅读 · 0 评论 -
linux的netlink接口详解(上)
内核版本:3.14.38netlink是一种用于内核态和用户态进程之间进行数据传输的特殊的IPC机制。特点: 1) 用户态采用socket风格的API 2) 除了预定义的协议类型之外,支持自定义协议类型 3) 异步通讯 4) 支持消息组播 4) 全双工(特别是支持内核主动发起会话)netlink涉及的数据结构:原创 2017-04-06 11:30:21 · 12419 阅读 · 0 评论 -
Linux环境编程主要头文件分析
适用于linux 3.14及以后---------------------------------------------------------------------------------------------------/usr/include目录下包含了linux环境编程时可以使用的所有头文件,这些头文件大致可以分为以下几类: [1]. linux内核支持的API接口原创 2017-09-28 15:35:34 · 1073 阅读 · 0 评论 -
linux下vlan的实现分析(上)
一. VLAN的核心概念 1. 划分VLAN的核心目的只有一个:分割广播域。 通过VLAN对广播域进行合理分割之后,一是可以缩小ARP攻击的范围,从而提高网络的安全性;二是可以缩小广播域的大小,从而提高网络的性能。 所以要注意的是,划分VLAN的目的中根本没有隔离不同VLAN用户互访这一说法,这只是划分VLAN之后的一种应用,不然使用三层设备实现不同V原创 2017-04-25 10:11:50 · 5984 阅读 · 0 评论 -
APUE笔记之文件IO
1. int fcntl(int fd,int cmd) / int fcntl(int fd,int cmd,long arg) / int fcntl(int fd,int cmd,struct flock *lock) fcntl函数有以上3中调用格式,和open一样,都是用可变参数实现的,可变参数的类型和格式取决于前面的cmd参数 fcntl函数可以改变一个原创 2017-02-07 21:13:44 · 522 阅读 · 0 评论