文章目录
7. Linux服务器程序规范
7.1. UID、EUID
一个进程拥有两个用户ID:UID、EUID
- 做任何一个操作时,最终看它有没有权限,是在判断有效用户ID是否有权限
- 比如su程序,要访问 /etc/passwd,而访问该文件需要root权限。将su程序设置set-user-id标志,普通用户启动的su程序就能依据EUID来执行。
7.2. 进程间关系
7.3 查看、修改资源限制
- ulimit
修改当前shell环境下的资源限制(软限制、硬限制),对该shell启动对所有后续程序有效- 修改配置文件
7.4 获取、改变工作目录
char* getcwd(char* buf, size_t size);
int chdir(const char* path);
7.5 设置后台进程
int daemon(int nochdir, int noclose);
nochdir:
==0,工作目录切换为 /
!=0,继续使用当前工作目录
noclose:
==0,标准输入、标准输出、标准错误重定向到/dev/null
!=0,依然使用原来对设备
8. 高性能服务器程序框架
8.1 C/S模型
8.2 I/O模型
阻塞IO:阻塞的文件描述符
非阻塞IO:非阻塞的文件描述符
- 可能被阻塞的系统调用:accept、send、recv、connect
对于非阻塞的I/O系统调用总是立即返回,如果事件没有立即发生,返回-1,根据errno来区分是否出错。
- accept、send、recv:errno设置成EAGAIN或EWOULDBLOCK
- connect:errno设置成EINPROGRESS
只有在事件已经发生的情况下操作非阻塞I/O,才能提高程序的效率。
非阻塞I/O通常要和其它I/O通知机制一起使用
- I/O复用:能提高程序效率的原因在于具有同时监听多个I/O事件的能力
- SIGIO信号
8.3 池
内存池:socket的接受缓存、发送缓存
进程池、线程池
连接池:连接数据库的长久连接