1、/proc文件系统
UNIX提供了/proc虚拟文件系统,内核信息文件存于/proc文件目录下;
该目录下的文件和子目录并未存储与磁盘上,由内核在进程访问此类信息时动态创建而成;
1.1 获取与进程有关的信息
【/proc/PID】:PID为进程;
【PID目录下的文件节选】:
- cmdline:以\0分隔的命令行参数;
- cwd:指向当前工作目录的符号链接;
- Environ:NAME=value 键值对环境列表,以\0分隔;
- exe:指向正在执行文件的符号链接;
- fd:文件目录,包含了指向由进程打开文件的符号链接;
- maps:内存映射;
- mem:进程虚拟内存(在IO操作之前必须调用Iseek(移至有效偏移量);
- mounts:进程的安装点;
- root:指向根目录的符号链接;
- status:各种信息(比如,进程ID、凭证、内存使用量、信号);
- task:为进程中的每个线程均包含一个子目录;
1.2 /proc目录下的系统信息
/proc:各种系统信息;
/proc/net:有关网络和套接字的状态信息;
/proc/sys/fs:文件系统相关设置;
/proc/sys/kernel:各种常规的内核设置;
/proc/sys/net:网络和套接字的设置;
/proc/sys/vm:内存管理设置;
/proc/sysvipc:有关System V IPC对象的信息;
1.3 访问/proc文件
该目录下的文件,大多为只读,且文件拥有者为root;
2、系统标识
#include <sys/utsname.h>
int uname(struct utsname *utsbuf);
#define _UTSNAME_LENGTH 65
struct utsname {
char sysname[_UTSNAME_LENGTH];
char nodename[_UTSNAME_LENGTH];
char release[_UTSNAME_LENGTH];
char version[_UTSNAME_LENGTH];
char mechine[_UTSNAME_LENGTH];
#ifdef _GNU_SOURCE
char domainname[_UTSNAME_LENGTH];
#endif
};
【eg】:
#include <iostream>
#include <sys/utsname.h>
#include "../Jxiepc/tlpi_hdr.h"
void test_uname() {
struct utsname uts;
if(uname(&uts) == -1)
errExit("name");
cout << "Node name: " << uts.nodename << endl;
cout << "System name: " << uts.sysname << endl;
cout << "Release: " << uts.release << endl;
cout << "Version: " << uts.version << endl;
cout << "Machine: " << uts.machine << endl;
cout << "Domain name: " << uts.domainname << endl;
}
int main(int argc, char* argv[])
{
test_uname();
return 0;
}