linux中的kconfig看不懂,谢谢呢

linux中的kconfig看不懂,谢谢呢,第1张

tristate 代表在内核中有三种状态,一种不选种,一种是*选种直接编译进内核,加载驱动到内核里,还有一种是M手动添加驱动,而 bool只有两种状态,即选中和不选中。"Mini2440 module sample"这个是在make menuconfig时刷出的提示字符。depends on MACH_MINI2440 这个配置选项出现在make menuconfig菜单栏下,在内核配置中必须选中MACH_MINI2440。default m if MACH_MINI2440 这个如果选种了MACH_MINI2440,默认是手动加载这个驱动。help以后的都是帮助信息了

获取 Windows *** 作系统版本信息的 C 程序 [zt]

From:[url]http://kevin2296.blog.163.com/article/-aBzn-rfC7hw.html[/url]

[php]

// OSinfo.cpp : 定义控制台应用程序的入口点。

#include "stdafx.h"

#include <windows.h>

#include <stdio.h>

#include "winsock.h"

#include <string>

#include <iostream>

using std::coutusing std::stringusing std::iostream

using std::endlusing std::iosusing std::fstream

using std::ofstreamusing std::cin

#pragma comment( lib, "Ws2_32.lib" )

#define MAX_VALUE_NAME 256

//char osinfo[MAX_PATH][MAX_PATH]

char patchname[MAX_VALUE_NAME]

//全局变量

char *LocalIP="" //定义IP地址变量

//获取本机ip

bool GetLocalIp()

{

WSADATA wsaData

char name[255]//定义用于存放获得的主机名的变量

PHOSTENT hostinfo

//调用MAKEWORD()获得Winsock版本的正确值,用于加载Winsock库

if ( WSAStartup( MAKEWORD(2,2), &wsaData ) == 0 )

{

//现在是加载Winsock库,如果WSAStartup()函数返回值为0,说明加载成功,程序可以继续

if( gethostname ( name, sizeof(name)) == 0)

{

//如果成功地将本地主机名存放入由name参数指定的缓冲区中

if((hostinfo = gethostbyname(name)) != NULL)

{

//这是获取主机名,如果获得主机名成功的话,将返回一个指针,指向hostinfo,hostinfo

//为PHOSTENT型的变量,下面即将用到这个结构体

LocalIP = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list)

//调用inet_ntoa()函数,将hostinfo结构变量中的h_addr_list转化为标准的点分表示的IP

//地址(如192.168.0.1)

// printf("the ip is:%s\n",LocalIP)//输出IP地址

}

}

WSACleanup( )//卸载Winsock库,并释放所有资源

}

return TRUE

}

//显示系统版本

bool DisplaySystemVesion(FILE *fp)

{

OSVERSIONINFOEX osvi

BOOL bOsVersionInfoEx

//利用OSVERSIONINFOEX结构调用GetVersionEx()函数

//如果调用失败,可尝试使用OSVERSIONINFO结构

ZeroMemory(&osvi,sizeof(OSVERSIONINFOEX))

osvi.dwOSVersionInfoSize=sizeof(OSVERSIONINFOEX)

if(!(bOsVersionInfoEx=GetVersionEx((OSVERSIONINFO*)&osvi)))

{

//

osvi.dwOSVersionInfoSize=sizeof(OSVERSIONINFO)

if(!GetVersionEx((OSVERSIONINFO*)&osvi))

return FALSE

}

switch(osvi.dwPlatformId)

{

case VER_PLATFORM_WIN32_NT:

//get os information

if ( osvi.dwMajorVersion == 5 &&osvi.dwMinorVersion == 2 )

{

printf("Microsoft Windows Server 2003 family ")

//fprintf( fp, "Microsoft Windows Server 2003 family ")

fprintf( fp, "WindowsServer2003")

// strcpy(osinfo[0],"Microsoft Windows Server 2003 family ")

}

if ( osvi.dwMajorVersion == 5 &&osvi.dwMinorVersion == 1 )

{

printf("Microsoft Windows XP ")

//fprintf( fp, "Microsoft Windows XP ")

fprintf( fp, "WindowsXP")

// strcpy(osinfo[0],"Microsoft Windows XP ")

}

if ( osvi.dwMajorVersion == 5 &&osvi.dwMinorVersion == 0 )

{

printf("Microsoft Windows 2000 ")

//fprintf( fp, "Microsoft Windows 2000 ")

fprintf( fp, "Windows2000")

// strcpy(osinfo[0],"Microsoft Windows 2000 ")

}

if ( osvi.dwMajorVersion <= 4 )

{

printf("Microsoft Windows NT ")

//fprintf( fp, "Microsoft Windows NT ")

fprintf( fp, "WindowsNT")

// strcpy(osinfo[0],"Microsoft Windows NT ")

}

//

if(bOsVersionInfoEx)

{

if(osvi.wProductType==VER_NT_WORKSTATION)

{

printf("Professional ")

// fprintf(fp,"Professional ")

}

if(osvi.wProductType==VER_NT_SERVER)

{

printf("Server ")

// fprintf(fp,"Server ")

}

//printf("\n")

fprintf(fp,"\n")

}

else

{

HKEY hKey

char szProductType[80]

DWORD dwBufLen

RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Control\\ProductOptions",0,KEY_QUERY_VALUE,&hKey)

RegQueryValueEx(hKey,"ProductType",NULL,NULL,(LPBYTE)szProductType,&dwBufLen)

RegCloseKey(hKey)

if(lstrcmpi("WINNT",szProductType)==0)

{

printf("Workstation ")

// fprintf(fp,"Workstation ")

}

if(lstrcmpi("SERVERNT",szProductType)==0)

{

printf("Server ")

// fprintf(fp,"Server ")

}

//printf("\n")

fprintf(fp,"\n")

}

// Display service pack (if any) and build number.

if( osvi.dwMajorVersion == 4 &&

lstrcmpi( osvi.szCSDVersion, "Service Pack 6" ) == 0 )

{

HKEY hKey

LONG lRet

// Test for SP6 versus SP6a.

lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE,

"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Hotfix\\Q246009",

0, KEY_QUERY_VALUE, &hKey )

if( lRet == ERROR_SUCCESS )

{

printf( "Service Pack 6a (Build %d)\n", osvi.dwBuildNumber &0xFFFF )

// fprintf( fp,"Service Pack 6a (Build %d)\n", osvi.dwBuildNumber &0xFFFF )

// fprintf( fp,"Service Pack 6a\n" )

fprintf( fp,"6a\n" )

}

else // Windows NT 4.0 prior to SP6a

{

printf( "%s (Build %d)",osvi.szCSDVersion,osvi.dwBuildNumber &0xFFFF)

/* printf( "%s (Build %d)\n",

osvi.szCSDVersion,

osvi.dwBuildNumber &0xFFFF)

*/

// fprintf( fp,"%s (Build %d)\n",

// osvi.szCSDVersion,

// osvi.dwBuildNumber &0xFFFF)

// fprintf( fp,"%s\n",osvi.szCSDVersion)

fprintf( fp,"%s\n",osvi.szCSDVersion+13) //去掉"Service Pack "共13个字节,只保留最后的号

}

RegCloseKey( hKey )

}

else // Windows NT 3.51 and earlier or Windows 2000 and later

{

printf( "%s (Build %d)",osvi.szCSDVersion,osvi.dwBuildNumber &0xFFFF)

/*printf( "%s (Build %d)\n",

osvi.szCSDVersion,

osvi.dwBuildNumber &0xFFFF)

*/

// fprintf( fp,"%s (Build %d)\n",

// osvi.szCSDVersion,

// osvi.dwBuildNumber &0xFFFF)

// fprintf( fp,"%s\n",osvi.szCSDVersion)

fprintf( fp,"%s\n",osvi.szCSDVersion+13) //去掉"Service Pack "共13个字节,只保留最后的号

}

break

case VER_PLATFORM_WIN32_WINDOWS:

if (osvi.dwMajorVersion == 4 &&osvi.dwMinorVersion == 0)

{

printf("Microsoft Windows 95 ")

fprintf(fp,"Microsoft Windows 95 ")

if ( osvi.szCSDVersion[1] == 'C' || osvi.szCSDVersion[1] == 'B' )

{

printf("OSR2")

fprintf(fp,"OSR2")

// strcat(osinfo[0], "OSR2" )

}

printf("\n")

fprintf(fp,"\n")

}

if (osvi.dwMajorVersion == 4 &&osvi.dwMinorVersion == 10)

{

printf("Microsoft Windows 98 ")

fprintf(fp,"Microsoft Windows 98 ")

if ( osvi.szCSDVersion[1] == 'A' )

{

printf("SE")

fprintf(fp,"SE")

}

printf("\n")

fprintf(fp,"\n")

}

if (osvi.dwMajorVersion == 4 &&osvi.dwMinorVersion == 90)

{

printf("Microsoft Windows Millennium Edition\n")

fprintf(fp,"Microsoft Windows Millennium Edition\n")

}

break

case VER_PLATFORM_WIN32s:

printf(" Microsoft Win32s\n")

fprintf(fp," Microsoft Win32s\n")

break

}

return TRUE

}

void DisplaySetupedPatch(FILE *fp)

{

HKEY hKey

// LONG lRet

// char Buf[80]

// char lpBuf[80]

DWORD i

DWORD retCode

// DWORD j

// DWORD retValue

DWORD dwxValueName=MAX_VALUE_NAME

LPCTSTR path="SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Hotfix"

LONG return0=RegOpenKeyEx(HKEY_LOCAL_MACHINE,path,0,KEY_READ,&hKey)

if(return0!=ERROR_SUCCESS)

{

printf("错误:无法打开有关的键!")

}

for(i=1,retCode=ERROR_SUCCESSretCode==ERROR_SUCCESSi++)

{

retCode=RegEnumKey(hKey,i,patchname,MAX_PATH)

if(retCode==ERROR_SUCCESS)

{

printf("%s\n",patchname)

fprintf(fp,"%s\n",patchname)

}

}

}

void main()

{

//写入文件

FILE *fp

GetLocalIp()

const char SaveReciveFilePath[]="f:\\"

string abPath(SaveReciveFilePath)

char Filename[512]=""

strcpy(Filename,LocalIP) //拷贝字符串

strcat(Filename,".txt") //连接字符串

abPath += Filename

fp=fopen(abPath.c_str(),"w")

while(fp==NULL)

// printf("the LocalIP is:%s\n",LocalIP)//输出IP地址

printf("本机IP地址:%s\n",LocalIP)//输出IP地址

// fprintf(fp,"本机IP:%s\n",LocalIP)

// fprintf(fp,"%s\n",LocalIP)

bool a=FALSE

printf("本机 *** 作系统版本是:")

// fprintf(fp,"本机 *** 作系统版本是:")

// *** 作系统版本信息

while (a!=TRUE)

{

a=DisplaySystemVesion(fp)

}

// *** 作系统语言信息

printf("语言:")

// fprintf(fp,"语言:")

/* WORD wLangPID = PRIMARYLANGID( GetSystemDefaultLangID() )

if( LANG_CHINESE == wLangPID )

{

printf("CHS\n")//中文

fprintf(fp,"CHN\n")

}

else

{

printf("ENG\n")//英文

fprintf(fp,"ENG\n")

}

if( NULL == wLangPID )

{

printf( "Failure!\n" )

}

*/

int LanguageID=GetSystemDefaultLangID() //返回 *** 作系统语言的ID号

switch(LanguageID)

{

case 0x0404:

printf("CHT\n")//Chinese Taiwan

fprintf(fp,"CHT\n")

break

case 0x0804:

printf("CHS\n")//Chinese PRC

fprintf(fp,"CHS\n")

break

case 0x0c04:

printf("ZHH\n")//Chinese Hong Kong SAR

fprintf(fp,"ZHH\n")

break

case 0x1004:

printf("ZHH\n")//Chinese Singapore

fprintf(fp,"ZHH\n")

break

case 0x1404:

printf("ZHM\n")//Chinese Macau SAR

fprintf(fp,"ZHM\n")

break

case 0x0809:

printf("ENG\n")//English United Kingdom

fprintf(fp,"ENG\n")

break

case 0x0409:

printf("USA\n")//English United States

fprintf(fp,"USA\n")

break

default:

printf("Default\n")

fprintf(fp,"Default\n")

break

}

// printf("%d\n",id)

// *** 作系统已安装补丁信息

printf("系统已经安装的升级补丁有:\n")

// fprintf(fp,"系统已经安装的升级补丁有:\n")

DisplaySetupedPatch(fp)

fclose(fp)

}

#ifndef THREAD_H_  

#define THREAD_H_  

#include <unistd.h>  

#include <pthread.h>  

class Runnable  

{  

public:  

//运行实体  

virtual void run() = 0  

}  

//线程类  

class Thread: public Runnable  

{  

private:  

//线程初始化号  

static int thread_init_number  

//当前线程初始化序号  

int current_thread_init_number  

//线程体  

Runnable *target  

//当前线程的线程ID  

pthread_t tid  

//线程的状态  

int thread_status  

//线程属性  

pthread_attr_t attr  

//线程优先级  

sched_param param  

//获取执行方法的指针  

static void* run0(void* pVoid)  

//内部执行方法  

void* run1()  

//获取线程序号  

static int get_next_thread_num()  

public:  

//线程的状态-新建  

static const int THREAD_STATUS_NEW = 0  

//线程的状态-正在运行  

static const int THREAD_STATUS_RUNNING = 1  

//线程的状态-运行结束  

static const int THREAD_STATUS_EXIT = -1  

//构造函数  

Thread()  

//构造函数  

Thread(Runnable *target)  

//析构  

~Thread()  

//线程的运行体  

void run()  

//开始执行线程  

bool start()  

//获取线程状态  

int get_state()  

//等待线程直至退出  

void join()  

//等待线程退出或者超时  

void join(unsigned long millis_time)  

//比较两个线程时候相同,通过current_thread_init_number判断  

bool operator ==(const Thread* other_pthread)  

//获取this线程ID  

pthread_t get_thread_id()  

//获取当前线程ID  

static pthread_t get_current_thread_id()  

//当前线程是否和某个线程相等,通过tid判断  

static bool is_equals(Thread* iTarget)  

//设置线程的类型:绑定/非绑定  

void set_thread_scope(bool isSystem)  

//获取线程的类型:绑定/非绑定  

bool get_thread_scope()  

//设置线程的优先级,1-99,其中99为实时,意外的为普通  

void set_thread_priority(int priority)  

//获取线程的优先级  

int get_thread_priority()  

}  

int Thread::thread_init_number = 1  

inline int Thread::get_next_thread_num()  

{  

return thread_init_number++  

}  

void* Thread::run0(void* pVoid)  

{  

Thread* p = (Thread*) pVoid  

p->run1()  

return p  

}  

void* Thread::run1()  

{  

thread_status = THREAD_STATUS_RUNNING  

tid = pthread_self()  

run()  

thread_status = THREAD_STATUS_EXIT  

tid = 0  

pthread_exit(NULL)  

}  

void Thread::run()  

{  

if (target != NULL)  

{  

  (*target).run()  

}  

}  

Thread::Thread()  

{  

tid = 0  

thread_status = THREAD_STATUS_NEW  

current_thread_init_number = get_next_thread_num()  

pthread_attr_init(&attr)  

}  

Thread::Thread(Runnable *iTarget)  

{  

target = iTarget  

tid = 0  

thread_status = THREAD_STATUS_NEW  

current_thread_init_number = get_next_thread_num()  

pthread_attr_init(&attr)  

}  

Thread::~Thread()  

{  

pthread_attr_destroy(&attr)  

}  

bool Thread::start()  

{  

return pthread_create(&tid, &attr, run0, this)  

}  

inline pthread_t Thread::get_current_thread_id()  

{  

return pthread_self()  

}  

inline pthread_t Thread::get_thread_id()  

{  

return tid  

}  

inline int Thread::get_state()  

{  

return thread_status  

}  

void Thread::join()  

{  

if (tid > 0)  

{  

  pthread_join(tid,NULL)  

}  

}  

void Thread::join(unsigned long millis_time)  

{  

if (tid == 0)  

{  

  return  

}  

if (millis_time == 0)  

{  

  join()  

}  

else  

{  

  unsigned long k = 0  

  while (thread_status != THREAD_STATUS_EXIT && k <= millis_time)  

  {  

   usleep(100)  

   k++  

  }  

}  

}  

bool Thread::operator ==(const Thread* other_pthread)  

{  

if(other_pthread==NULL)  

{  

  return false  

}if(current_thread_init_number==(*other_pthread).current_thread_init_number)  

{  

  return true  

}  

return false  

}  

bool Thread::is_equals(Thread* iTarget)  

{  

if (iTarget == NULL)  

{  

  return false  

}  

return pthread_self() == iTarget->tid  

}  

void Thread::set_thread_scope(bool isSystem)  

{  

if (isSystem)  

{  

  pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM)  

}  

else  

{  

  pthread_attr_setscope(&attr, PTHREAD_SCOPE_PROCESS)  

}  

}  

void Thread::set_thread_priority(int priority)  

{  

pthread_attr_getschedparam(&attr,&param)  

param.__sched_priority = priority  

pthread_attr_setschedparam(&attr,&param)  

}  

int Thread::get_thread_priority(){  

pthread_attr_getschedparam(&attr,&param)  

return param.__sched_priority  

}  

#endif /* THREAD_H_ */


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/6081024.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-14
下一篇 2023-03-14

发表评论

登录后才能评论

评论列表(0条)

保存