摘要:
最大文件描述符数量 文件描述符是服务器程序的宝贵资源,几乎所有系统调用都是和文件描述符打交道。而系统分配给进程的文件描述符数量有限,因此需要及时关闭那些不用的文件描述符。 Linux对应用程序能打开的最大文件描述符数量,有2个层次限制:用户级限制,系统级限制。 1)用户级限制,是指目标用户运行的所有 阅读全文
摘要:
UID、EUID、GID、EGID 几个常见用户信息概念:UID、EUID、GID、EGID UID:当前进程的真实用户ID; EUID:有效用户ID; 真实组ID:GID; 有效组ID:EGID; 可以通过下面这组函数获取和设置当前进程的用户信息: #include <sys/types.h> # 阅读全文
摘要:
tee() 在两个管道文件描述符之间复制数据,也是重要的零拷贝技术之一。tee不消耗数据,因此源文件描述符上的数据仍然可以用于后续的读操作。 tee签名 #define _GNU_SOURCE /* See feature_test_macros(7) */ #include <fcntl.h> s 阅读全文
摘要:
splice用于在两个文件描述符之间移动数据,也是一种重要零拷贝技术。 splice声明 #define _GNU_SOURCE /* See feature_test_macros(7) */ #include <fcntl.h> ssize_t splice(int fd_in, loff_t 阅读全文
摘要:
存储映射的基本概念 存储映射(memory map)简称mmap,是直接将实际存储的物理地址映射到进程空间,而不使用read/write函数。这样,可以省去中间繁杂调用过程, 快速对文件进行大量输入输出。 mmap() 用于申请一段内存空间,将一个文件或Posix共享内存区对象映射到进程的地址空间; 阅读全文