C++ 实现获取系统名称

2023-11-20

项目中需要用到操作系统名及版本信息:下面是用两种方法实现的

一种是通过查询注册表:


 

#include "stdafx.h"
#include <Windows.h>
#include <string>
#include <stdio.h>
#include <iostream>
#include <strsafe.h>
#include "RegistryControl.h"
using namespace std;
 #pragma warning(disable:4996)

#define  SYS_INFO_PATH1 (L"Software\\Microsoft\\Windows NT\\CurrentVersion")


BOOL SystemNameInfo(wchar_t *wzSystemName,int size)
{
	

	GA::CRegistryControl Reg;
    //打开注册表函数若是64位系统则需要关闭注册表重定向
	if (!Reg.OpenKey(HKEY_LOCAL_MACHINE,SYS_INFO_PATH1,false,IsWow64()))
		return false;

	wchar_t wzProduct[256] = {0};
	DWORD dwBuffSize = sizeof(wzProduct);

	if (!Reg.GetStringValue(L"ProductName", wzProduct, &dwBuffSize))
	{
		Reg.CloseKey();
		return false;
	}
	Reg.CloseKey();

	StringCchCopy(wzSystemName,size,L"Microsoft ");

	StringCchCat(wzSystemName,size,wzProduct);

	StringCchCat(wzSystemName,size,L" ");
	if (IsWow64())
	{
		StringCchCat(wzSystemName,size,L"x64");
	}
	else
	{
		StringCchCat(wzSystemName,size,L"x86");
	}

}

int _tmain(int argc, _TCHAR* argv[])
{

 	wchar_t productname[MAX_PATH];
	SystemNameInfo(productname,MAX_PATH);
	wprintf(L"%s\n",productname);


	getchar();
	getchar();
	return 0;
}

方法二:

通过GetVersionEx和RtlGetNtVersionNumbers 查询系统主次版本号,根据系统版本号返回相应的系统名称:

#include "stdafx.h"
#include <Windows.h>
#include <string>
#include <stdio.h>
#include <iostream>
#include <strsafe.h>
#include "RegistryControl.h"
using namespace std;
 #pragma warning(disable:4996)

#define SM_SERVERR2             89

#define WINVERSION_2012 4026541440 //Microsoft Windows Server 2012 R2 的BuildNumber号
#define WINVERSION_10   4026546233 //Microsoft Windows 10 的BuildNumber号
#define WINVERSION_10_1 4026548974

typedef void (WINAPI *PGNSI) (LPSYSTEM_INFO);
typedef BOOL (WINAPI *PGPI)(DWORD,DWORD,DWORD,DWORD,PDWORD);
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS)(HANDLE, PBOOL);
#define BUFSIZE 256

void GetVersionType(UINT uType,wstring & versionType)
{
	wchar_t pszOS[BUFSIZE] = {0};
	switch( uType )
	{
	case PRODUCT_ULTIMATE:
		StringCchCopy(pszOS, BUFSIZE, TEXT("Ultimate "));
		break;
		//case PRODUCT_PROFESSIONAL:
	case 0x00000030:
		StringCchCopy(pszOS, BUFSIZE, TEXT("Professional "));
		break;
	case PRODUCT_HOME_PREMIUM:
		StringCchCopy(pszOS, BUFSIZE, TEXT("Home Premium "));
		break;
	case PRODUCT_HOME_BASIC:
		StringCchCopy(pszOS, BUFSIZE, TEXT("Home Basic "));
		break;
	case PRODUCT_ENTERPRISE:
		StringCchCopy(pszOS, BUFSIZE, TEXT("Enterprise "));
		break;
	case PRODUCT_BUSINESS:
		StringCchCopy(pszOS, BUFSIZE, TEXT("Business "));
		break;
	case PRODUCT_STARTER:
		StringCchCopy(pszOS, BUFSIZE, TEXT("Starter "));
		break;
	case PRODUCT_CLUSTER_SERVER:
		StringCchCopy(pszOS, BUFSIZE, TEXT("Cluster Server "));
		break;
	case PRODUCT_DATACENTER_SERVER:
		StringCchCopy(pszOS, BUFSIZE, TEXT("Datacenter "));
		break;
	case PRODUCT_DATACENTER_SERVER_CORE:
		StringCchCopy(pszOS, BUFSIZE, TEXT("Datacenter Edition (core installation) " ));
		break;
	case PRODUCT_ENTERPRISE_SERVER:
		StringCchCopy(pszOS, BUFSIZE, TEXT("Enterprise " ));
		break;
	case PRODUCT_ENTERPRISE_SERVER_CORE:
		StringCchCopy(pszOS, BUFSIZE, TEXT("Enterprise Edition (core installation) " ));
		break;
	case PRODUCT_ENTERPRISE_SERVER_IA64:
		StringCchCopy(pszOS, BUFSIZE, TEXT("Enterprise Edition for Itanium-based Systems " ));
		break;
	case PRODUCT_SMALLBUSINESS_SERVER:
		StringCchCopy(pszOS, BUFSIZE, TEXT("Small Business Server " ));
		break;
	case PRODUCT_SMALLBUSINESS_SERVER_PREMIUM:
		StringCchCopy(pszOS, BUFSIZE, TEXT("Small Business Server Premium Edition " ));
		break;
	case PRODUCT_STANDARD_SERVER:
		StringCchCopy(pszOS, BUFSIZE, TEXT("Standard " ));
		break;
	case PRODUCT_STANDARD_SERVER_CORE:
		StringCchCopy(pszOS, BUFSIZE, TEXT("Standard Edition (core installation) " ));
		break;
	case PRODUCT_WEB_SERVER:
		StringCchCopy(pszOS, BUFSIZE, TEXT("Web Server " ));
		break;
	case 0x00000079:
		StringCchCopy(pszOS, BUFSIZE, TEXT("Education " ));
		break;
	default:
		StringCchCopy(pszOS, BUFSIZE,TEXT(" "));
		break;
	}
	versionType = pszOS;
}

BOOL IsWow64()   //判断是否是64位系统
{
	LPFN_ISWOW64PROCESS fnIsWow64Process;
	BOOL bIsWow64 = FALSE;
	fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(GetModuleHandle(TEXT("kernel32")),"IsWow64Process");
	if (NULL != fnIsWow64Process)
	{
		fnIsWow64Process(GetCurrentProcess(), &bIsWow64);
	}
	return bIsWow64;
}

BOOL  GetSystemName(wchar_t *buf, int  bufsize)
{
	static std::wstring vname;
	//先判断是否为win8.1或win10
	typedef void(__stdcall*NTPROC)(DWORD*, DWORD*, DWORD*);
	HINSTANCE hinst = LoadLibrary(L"ntdll.dll");
	DWORD dwMajor, dwMinor, dwBuildNumber;
	NTPROC proc = (NTPROC)GetProcAddress(hinst, "RtlGetNtVersionNumbers"); 
	proc(&dwMajor, &dwMinor, &dwBuildNumber); 



	memset(buf, 0, bufsize*sizeof(wchar_t));

	PGNSI pGNSI;
	PGPI pGPI;
	BOOL bOsVersionInfoEx;
	DWORD dwType;
	OSVERSIONINFOEX osvi;
	SYSTEM_INFO si;
	wstring wstrVersionType;

	ZeroMemory(&si, sizeof(SYSTEM_INFO));
	ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));

	osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);


	if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
	{
		return FALSE;
	}
		

  	pGNSI = (PGNSI) GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")),  "GetNativeSystemInfo");
  	if(NULL != pGNSI)
  		pGNSI(&si);
  	else 
  		GetSystemInfo(&si);
  

	StringCchCopy(buf, bufsize, TEXT("Microsoft "));


	if (dwMajor >= 6)
	{

		pGPI = (PGPI) GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")),  "GetProductInfo");

		pGPI( osvi.dwMajorVersion, osvi.dwMinorVersion, 0, 0, &dwType);

		if (dwMajor == 6 && dwMinor == 3)	//win 8.1
		{
			if (dwBuildNumber == WINVERSION_2012)
			{
				//vname = L"Microsoft Windows Server 2012 R2";
				StringCchCat(buf, bufsize, TEXT("Windows Server 2012 R2 "));
			}
			else
			{
				//vname = L"Microsoft Windows 8.1";
				StringCchCat(buf, bufsize, TEXT("Windows 8.1 "));
			}

			GetVersionType(dwType, wstrVersionType);

			StringCchCat(buf,bufsize,wstrVersionType.c_str());

			if (IsWow64())
				StringCchCat(buf, bufsize,TEXT("x64"));
			else
				StringCchCat(buf, bufsize,TEXT("x86"));
			//return vname.c_str();
			return TRUE;
		}

		if (dwMajor == 10 && dwMinor == 0)	//win 10
		{
			    if(osvi.wProductType == VER_NT_WORKSTATION)
					StringCchCat(buf,bufsize,TEXT("Windows 10 "));
				else
					StringCchCat(buf,bufsize,TEXT("Windows Server 2016 "));;//服务器版本 
	


			GetVersionType(dwType, wstrVersionType);

			StringCchCat(buf,bufsize,wstrVersionType.c_str());

			if (IsWow64())
				StringCchCat(buf, bufsize,TEXT("x64"));
			else
				StringCchCat(buf, bufsize,TEXT("x86"));
			//return vname.c_str();
			return TRUE;
		}

		if (osvi.dwMajorVersion == 6)
		{
			switch (osvi.dwMinorVersion)
			{
			case 0:
				{
					if (osvi.wProductType == VER_NT_WORKSTATION)
						StringCchCat(buf, bufsize, TEXT("Windows Vista "));
					else
						StringCchCat(buf, bufsize, TEXT("Windows Server 2008 "));

				}
				break;
			case 1:
				{
					if (osvi.wProductType == VER_NT_WORKSTATION)
						StringCchCat(buf, bufsize, TEXT("Windows 7 "));
					else
						StringCchCat(buf, bufsize, TEXT("Windows Server 2008 R2 "));
				}
				break;
			case 2:
				{
					if (osvi.wProductType == VER_NT_WORKSTATION)
						StringCchCat(buf, bufsize, TEXT("Windows 8 "));
					else
						StringCchCat(buf, bufsize, TEXT("Windows Server 2012 "));

				}
				break;
			}

			GetVersionType(dwType, wstrVersionType);
			StringCchCat(buf,bufsize,wstrVersionType.c_str()); 
			if (IsWow64())
				StringCchCat(buf, bufsize,TEXT("x64"));
			else
				StringCchCat(buf, bufsize,TEXT("x86"));

			return TRUE;

		}
	}
	else
	{

		//下面根据版本信息判断操作系统名称  
		switch (osvi.dwMajorVersion)  //判断主版本号  
		{                       	
		case 5:
			{
				switch (osvi.dwMinorVersion)
				{               //再比较dwMinorVersion的值  
				case 0:
					{
						StringCchCat(buf, bufsize, TEXT("Windows 2000")); //1999年12月发布  
						if ( osvi.wProductType == VER_NT_WORKSTATION )
						{
							StringCchCat(buf, bufsize, TEXT( "Professional" ));
						}
						else 
						{
							if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
							{
								StringCchCat(buf, bufsize, TEXT( "Datacenter Server" ));
							}     
							else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
							{
								StringCchCat(buf, bufsize, TEXT( "Advanced Server" ));
							}    
							else
							{
								StringCchCat(buf, bufsize, TEXT( "Server" ));
							} 

						}

						if (IsWow64())
							StringCchCat(buf, bufsize,TEXT("x64"));
						else
							StringCchCat(buf, bufsize,TEXT("x86"));
					}
					break;
				case 1:
					{
						StringCchCat(buf, bufsize, TEXT("Windows XP"));  //2001年8月发布    
						if( osvi.wSuiteMask & VER_SUITE_PERSONAL )
							StringCchCat(buf, bufsize, TEXT( "Home Edition" ));
						else 
							StringCchCat(buf, bufsize, TEXT( "Professional" ));

			           if (IsWow64())
				          StringCchCat(buf, bufsize,TEXT("x64"));
			           else
				          StringCchCat(buf, bufsize,TEXT("x86"));
			        }
					break;
				case 2:
			       {

					   if( GetSystemMetrics(SM_SERVERR2))
						   StringCchCat(buf, bufsize, TEXT( "Windows Server 2003 R2 "));
					   else if ( osvi.wSuiteMask & VER_SUITE_STORAGE_SERVER )
						   StringCchCat(buf, bufsize, TEXT( "Windows Storage Server 2003 "));

					   else if( osvi.wProductType == VER_NT_WORKSTATION && si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)
					   {
						   StringCchCat(buf, bufsize, TEXT( "Windows XP Professional x64 Edition "));
					   }
					   else 
						   StringCchCat(buf, bufsize, TEXT("Windows Server 2003 "));

					   // Test for the server type.
					   if ( osvi.wProductType != VER_NT_WORKSTATION )
					   {
						   if ( si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_IA64 )
						   {
							   if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
								   StringCchCat(buf, bufsize, TEXT( "Datacenter Edition for Itanium-based Systems " ));
							   else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
								   StringCchCat(buf, bufsize, TEXT( "Enterprise Edition for Itanium-based Systems " ));
						   }
						   else if ( si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64 )
						   {
							   if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
								   StringCchCat(buf, bufsize, TEXT( "Datacenter x64 Edition " ));
							   else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
								   StringCchCat(buf, bufsize, TEXT( "Enterprise x64 Edition " ));
							   else 
								   StringCchCat(buf, bufsize, TEXT( "Standard x64 Edition " ));
						   }
						   else
						   {
							   if ( osvi.wSuiteMask & VER_SUITE_COMPUTE_SERVER )
								   StringCchCat(buf, bufsize, TEXT( "Compute Cluster Edition " ));
							   else if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
								   StringCchCat(buf, bufsize, TEXT( "Datacenter Edition " ));
							   else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
								   StringCchCat(buf, bufsize, TEXT( "Enterprise Edition " ));
							   else if ( osvi.wSuiteMask & VER_SUITE_BLADE )
								   StringCchCat(buf, bufsize, TEXT( "Web Edition " ));
							   else 
								   StringCchCat(buf, bufsize, TEXT( "Standard Edition " ));
						   }			
					   }

					   break;
			       }
				}

			break;
		case 4:
			switch (osvi.dwMinorVersion)
			{                //判断次版本号  
			case 0:
				if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
					StringCchCat(buf, bufsize, TEXT("Windows NT 4.0"));//1996年7月发布  
				else if (osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
					StringCchCat(buf, bufsize, TEXT("Windows 95"));
				break;
			case 10:
				StringCchCat(buf, bufsize, TEXT("Windows 98"));
				break;
			case 90:
				StringCchCat(buf, bufsize, TEXT("Windows Me"));
				break;
			}
			break;

		default:
			StringCchCat(buf, bufsize, TEXT("Unknown OS"));
			break;
		}
	  }
	}
  
	return TRUE;
}
int _tmain(int argc, _TCHAR* argv[])
{
	wchar_t systename[MAX_PATH] ;

	GetSystemName(systename, MAX_PATH);
 
	wprintf(L"%s",systename);

	getchar();
	getchar();
	return 0;
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 实现获取系统名称 的相关文章

  • 我应该把 try/catch 和“using”语句放在哪里? [复制]

    这个问题在这里已经有答案了 可能的重复 try catch using 正确的语法 https stackoverflow com questions 4590490 try catch using right syntax 我想try c
  • 并行化斐波那契序列生成器

    我正在学习并行化 在一项练习中 我得到了一些我应该提高性能的算法 其中之一是斐波那契数列生成器 array 0 0 array 1 1 for q 2 q lt MAX q array q array q 1 array q 2 我怀疑 这
  • 司机和提供商之间的区别

    数据库中的驱动程序和提供程序有什么区别 有没有解释一下 不胜感激 样本 ADO NET driver for MySQL vs providerName System Data EntityClient 来自 MSDN 论坛 驱动程序是安装
  • C# 处理标准输入

    我目前正在尝试通过命令行断开与网络文件夹的连接 并使用以下代码 System Diagnostics Process process2 new System Diagnostics Process System Diagnostics Pr
  • C 中“complex”的默认类型

    根据我读过的文档 C99 和更高版本的支持float complex double complex and long double complex作为复杂类型 但是 此代码在使用时编译时不会发出警告gcc Wall Wextra inclu
  • 为什么需要数字后缀?

    C 语言 我确信还有其他语言 需要在数字文字末尾添加后缀 这些后缀指示文字的类型 例如 5m是一个小数 5f是一个浮点数 我的问题是 这些后缀真的有必要吗 或者是否可以从上下文中推断出文字的类型 例如 代码decimal d 5 0应该推断
  • C# 编译器数字文字

    有谁知道 C 编译器数字文字修饰符的完整列表 默认情况下 声明 0 使其成为 Int32 声明 0 0 使其成为 Double 我可以在末尾使用文字修饰符 f 来确保某些内容被视为 Single 例如像这样 var x 0 x is Int
  • 你好,我最近正在开发我的新游戏,我遇到了*无限跳跃*的问题

    所以基本上当我按跳跃 空格键时我会跳跃但是如果我连续按空格键它 只是跳啊跳啊跳等等 我不想要我只想它跳一次 code if Input GetKeyDown space isGrounded velocity y Mathf Sqrt ju
  • 子目录中的头文件(例如 gtk/gtk.h 与 gtk-2.0/gtk/gtk.h)

    我正在尝试使用 GTK 构建一个 hello world 其中包括以下行 include
  • Resharper:IEnumerable 的可能多重枚举

    我正在使用新的 Resharper 版本 6 在我的代码中的几个地方 它给一些文本加了下划线 并警告我可能存在IEnumerable 可能的多重枚举 我理解这意味着什么 并在适当的情况下采纳了建议 但在某些情况下 我不确定这实际上是一个大问
  • 如何使用 CSI.exe 脚本参数

    当你运行csi exe 安装了 Visual Studio 2015 update 2 您将得到以下语法 Microsoft R Visual C Interactive Compiler version 1 2 0 51106 Copyr
  • C# 中的 C/C++ 代码编译器

    在 C 中 我可以使用下面的代码编译 VB 和 C 代码 但无法编译 C C 代码 有什么办法可以做到这一点吗 C 编译器 public void Compile string ToCompile string Result null st
  • EnumDisplayDevices 与 WMI Win32_DesktopMonitor,如何检测活动监视器?

    对于我当前的 C 项目 我需要为在大量计算机上连接并处于活动状态的每个监视器检测一个唯一的字符串 研究指出了两种选择 使用 WMI 并查询 Win32 DesktopMonitor 以获取所有活动监视器 使用 PNPDeviceID 来唯一
  • C 中使用 getrandom 实现随机浮点数

    我试图生成一个介于 0 和 1 之间的随机浮点数 无论是在 0 1 还是 0 1 对我来说都不重要 网上关于此的每个问题似乎都涉及rand 呼叫 播种time NULL 但我希望能够每秒多次调用我的程序 并每次都获得不同的随机数 这引导我找
  • 浮点字节序?

    我正在为实时海上模拟器编写客户端和服务器 并且由于我必须通过套接字发送大量数据 因此我使用二进制数据来最大化可以发送的数据量 我已经了解整数字节顺序以及如何使用htonl and ntohl为了规避字节顺序问题 但我的应用程序与几乎所有模拟
  • 如何在dll级别读取app.config? [复制]

    这个问题在这里已经有答案了 我在一个解决方案中有一个控制台应用程序项目和库项目 dll The 图书馆项目有 app config 文件 我在其中存储我在库中使用的一些键值对 控制台应用程序引用此 dll 我有另一个 app config
  • Xamarin.Forms UWP 项目中标题栏和选项卡之间令人恼火的空白

    我几乎是新手Xamarin Forms我正在开发一个相当简单的跨平台应用程序 该应用程序在 Android 中显示得足够好 但在 UWP 中却出现了一个愚蠢的空白 该项目由一个 TabbedPage 组成 其中包含 4 个 Navigati
  • 无法识别解决方案文件夹中的 Visual Studio 2017 Nuget.config

    我在使用 Visual Studio 2017 时遇到问题 新的解决方案不断引用 C Users yopa AppData Roaming NuGet Nuget config 中意外位置的 Nuget config 文件 我已将 nuge
  • 这种尺寸对齐是如何工作的

    对于所提供的评论 我无法理解以下代码 这段代码的作用是什么 以及等效的代码是什么8 aligned segment size must be 4 aligned attr gt options ssize 3 Here ssize is o
  • 如何提高环复杂度?

    对于具有大量决策语句 包括 if while for 语句 的方法 循环复杂度会很高 那么我们该如何改进呢 我正在处理一个大项目 我应该减少 CC gt 10 的方法的 CC 并且有很多方法都存在这个问题 下面我将列出一些例如我遇到的问题的

随机推荐

  • angular2 Http请求

    提供HTTP服务 HttpModule并不是Angular的核心模块 它是Angular用来进行Web访问的一种可选方式 并位于一个名叫 angular http的独立附属模块中 编辑app module ts import HttpMod
  • Fortran基础1——声明及数据类型

    声明及数据类型 一 声明的意义 告诉编译器要预留一些存放数据的内存空间 二 基本数据类型 数据类型 描述 整数 integer a 浮点数 real a 字符 character a 逻辑变量 logical a 复数 complex a
  • 程序员的自我修养——链接、装载与库

    1 温故而知新 操作系统概念 北桥 连接高速芯片 系统调用接口 以软件中断的方式提供 如Linux使用0x80号中断作为系统调用接口 多任务系统 进程隔离 设备驱动 直接使用物理内存的弊端 地址空间不隔离 内存使用效率低 程序运行的地址不确
  • httpclient 聚合

    文章目录 依赖 DefaultHttpClient 废弃 设置代理 传文件 HttpClientUtil version 4 3 6 依赖
  • html+js实现输入用户名和密码点击登录跳转页面

    html js实现 输入用户名和密码点击登录跳转其他页面 这里主页是index html 跳转的页面名字是随机点名 html 1 index html 用户名
  • OpenCV-Python调整图像对比度和带文字白纸照片背景漂白方法

    一 引言 在前面我们介绍了直方图均衡可以调整图像的对比度 那么还有没有其他方式调整对比度呢 答案是肯定的 今天就来招硬核的 二 对比度调整的硬核方法 这招硬核方法就是参考灰度图像的阈值处理 我们知道灰度图像的阈值处理的基本思想是 将图像中灰
  • SVN使用手册【简洁明了】

    这里写自定义目录标题 欢迎观看我的文档 废话不多说直接上方法 适合新手小白 SVN的工作原理 SVN的主要操作 1 SVN检出 SVN Checkout 2 SVN提交 上传SVN Commit SVN更新 下载 SVN Update 4
  • Kafka性能保证和延时队列实现原理

    数据不丢不漏 不重不错 一 不丢 生产写入消息不丢失 数据组织形式 首先 从数据组织形式来说 kafka有三层形式 kafka有多个主题 topic 每个主题有多个分区 分区分为主分区和副本分区 每个分区又有多条消息 而每个分区可以分布到不
  • epoll文件服务器,基于epoll实现的一个简单的web服务器

    详解1 EPOLLIN 文件描述符可以读 EPOLLOUT 文件描述符可以写 EPOLLPRI 文件描述符有紧急的数据可写 EPOLLERR 文件描述符发生错误 EPOLLHUP 文件描述符被挂起 EPOLLET 文件描述符有事件发生 所用
  • 服务器2012怎么安装无线网卡驱动,如何安装usb无线网卡驱动,教您如何安装电脑usb驱动...

    现在很多人都喜欢用无线上网 其原因就是摆脱了有限的束缚 使得电脑可以随时随地的上网 如果想要使用无线网卡的话 首先需要安装无线网卡驱动 那么无线网卡驱动怎么安装 这里 小编就来给大家分享无线网卡驱动安装的图文教程 对于没有内置无线网卡的台式
  • MacOS全套详细介绍如何下载Nginx

    前言 最近心血来潮试着用Mac下载Nginx 下载过程中也出现了一些下载问题 为了方便诸位更加舒心使用Nginx 避免走一些弯路和阅读大量文档 减少大量不必要的时间 这里就集中从0 1做个详细介绍 1 查看是否有HomeBrew Homeb
  • 理解 Linux 配置文件 [转载]

    理解 Linux 配置文件 转载 http www 900 ibm com developerWorks cn linux management configuration index shtml 分类和使用 Subodh Soni sub
  • echarts坐标轴

    坐标轴 直角坐标系中的 x y 轴 x 轴 y 轴 x 轴和 y 轴都由轴线 刻度 刻度标签 轴标题四个部分组成 部分图表中还会有网格线来帮助查看和计算数据 普通的二维数据坐标系都有 x 轴和 y 轴 通常情况下 x 轴显示在图表的底部 y
  • 服务器处理数据和信息吗,1.1 NG搭建服务器 与 动态数据处理介绍

    fastCGI 动态请求数据处理 1 fastcgi安装步骤 1 configure 生成makefile 2 在 make运行makefile sudo make instll 安装即可 出现错误如下 image png 解决方案如下 找
  • 微服务配置中心springcloud从nacos动态获取最新配置信息

    1 添加nacos配置中心依赖
  • springBoot+MongoTemplate,往多个数据库中插入数据

    一 准备 1 建立一个springBoot的maven项目 使用spring initailizr 或者建立一个maven后自己添加相关springBoot配置
  • 使用Pritunl OpenVPN远程连接:实现安全高效的远程访问

    文章目录 前言 1 环境安装 2 开始安装 3 访问测试 4 创建连接 5 局域网测试连接 6 安装cpolar 7 配置固定公网访问地址 8 远程连接测试 前言 Pritunl是一款免费开源的 VPN 平台软件 但使用的不是标准的开源许可
  • 使用PyCharm Professional Edition开发Flask Web程序

    PyCharm官方页面 https www jetbrains com pycharm 注意 只有专业版支持以下全部操作 社区版和教育版均不支持 一 使用PyCharm创建VirtualEnv File Default Settings D
  • 组合测试方法PK正交分析方法

    测试过程中 我们经常遇到需要覆盖多个变化参数的测试场景 如我们测试BS配置控制客户端组织资源远程配置一个设备时 进行一个设备通道视频参数设置的各种组合测试 如下图 多数情况下 类似于这种多组合测试时 老员工则是依靠经验去进行有针对性的测试
  • C++ 实现获取系统名称

    项目中需要用到操作系统名及版本信息 下面是用两种方法实现的 一种是通过查询注册表 include stdafx h include