不多废话,直接展示代码代码语言:javascript代码运行次数:0运行复制```javascriptfunction in
不多废话,直接展示代码
代码语言:javascript代码运行次数:0运行复制```javascriptfunction info = cpuinfo()% CPU数据采集% 信息 = CPUINFO()返回一个包含不同字段的结构% 中央处理器和操作系统信息由/proc/cpuinfo(Unix)、% sysctl(Mac)或WMIC(Windows)提供。% CPU名称% CPU的时钟频率% CPU缓存大小(L2)% 物理CPU核心数% * 操作系统名称和版本%% 参见: computer, isunix, ismac
if isunix % 判断是否为UNIX系统if ismac % 判断是否为Mac系统info = cpuInfoMac();elseinfo = cpuInfoUnix();endelseinfo = cpuInfoWindows();end
%-------------------------------------------------------------------------function info = cpuInfoWindows()sysInfo = callWMIC('cpu');osInfo = callWMIC('os');info = struct( ...'Name', sysInfo.Name, ...'Clock', [sysInfo.MaxClockSpeed, ' MHz'], ...'Cache', [sysInfo.L2CacheSize, ' KB'], ...'NumProcessors', str2double(sysInfo.NumberOfCores), ...'OSType', 'Windows', ...'OSVersion', osInfo.Caption); % 输出结构
%-------------------------------------------------------------------------function info = callWMIC(alias)% 调用Windows管理命令行WMIColddir = pwd(); % 保存当前目录cd(tempdir); % 切换到临时目录sysinfo = evalc(sprintf('!wmic %s get /value', alias)); % 执行WMIC命令cd(olddir); % 切换回原目录fields = textscan(sysinfo, '%s', 'Delimiter', '\n');fields = fields{1}; % 处理数据fields(cellfun('isempty', fields)) = []; % 去除空行values = cell(size(fields));for ff = 1:numel(fields)idx = find(fields{ff} == '=', 1, 'first'); % 查找等号if ~isempty(idx) && idx > 1values{ff} = strtrim(fields{ff}(idx+1:end)); % 提取值fields{ff} = strtrim(fields{ff}(1:idx-1)); % 提取字段名endend% 删除任何重复项(仅适用于双插槽电脑,我们假设所有插槽有相同的处理器)。numResults = sum(strcmpi(fields, fields{1}));if numResults > 1% 计算核心数numCoresEntries = find(strcmpi(fields, 'NumberOfCores'));if ~isempty(numCoresEntries)cores = cellfun(@str2double, values(numCoresEntries));values(numCoresEntries) = {num2str(sum(cores))};end% 去除重复结果[fields, idx] = unique(fields, 'first');values = values(idx);end% 数据转换info = cell2struct(values, fields);
%-------------------------------------------------------------------------function info = cpuInfoMac()% Mac系统与Windows类似machdep = callSysCtl('machdep.cpu');hw = callSysCtl('hw');info = struct( ...'Name', machdep.brand_string, ...'Clock', [num2str(str2double(hw.cpufrequency_max)/1e6), ' MHz'], ...'Cache', [machdep.cache.size, ' KB'], ...'NumProcessors', str2double(machdep.core_count), ...'OSType', 'Mac OS/X', ...'OSVersion', getOSXVersion());
%-------------------------------------------------------------------------function info = callSysCtl(namespace)infostr = evalc(sprintf('!sysctl -a %s', namespace));% 移除前缀infostr = strrep(infostr, [namespace, '.'], '');% 现在转换为结构infostr = textscan(infostr, '%s', 'delimiter', '\n');infostr = infostr{1};info = struct();for ii = 1:numel(infostr)colonIdx = find(infostr{ii} == ':', 1, 'first');if isempty(colonIdx) || colonIdx == 1 || colonIdx == length(infostr{ii})continueendprefix = infostr{ii}(1:colonIdx-1);value = strtrim(infostr{ii}(colonIdx+1:end));while ismember('.', prefix)dotIndex = find(prefix == '.', 1, 'last');suffix = prefix(dotIndex+1:end);prefix = prefix(1:dotIndex-1);value = struct(suffix, value);endinfo.(prefix) = value;end
%-------------------------------------------------------------------------function vernum = getOSXVersion()% 提取操作系统版本号ver = evalc('system(''sw_vers'')');vernum = regexp(ver, 'ProductVersion:\s([1234567890.]*)', 'tokens', 'once');vernum = strtrim(vernum{1});
%-------------------------------------------------------------------------function info = cpuInfoUnix()txt = readCPUInfo();cpuinfo = parseCPUInfoText(txt);txt = readOSInfo();osinfo = parseOSInfoText(txt);% 合并结构info = cell2struct([struct2cell(cpuinfo); struct2cell(osinfo)], ...[fieldnames(cpuinfo); fieldnames(osinfo)]);
%-------------------------------------------------------------------------function info = parseCPUInfoText(txt)% 解析字段lookup = { ...'model name', 'Name' ...'cpu Mhz', 'Clock' ...'cpu cores', 'NumProcessors' ...'cache size', 'Cache' ...};info = struct( ...'Name', {''}, ...'Clock', {''}, ...'Cache', {''} );for ii = 1:numel(txt)if isempty(txt{ii})continue;end% 查找分隔属性名和值的冒号colon = find(txt{ii} == ':', 1, 'first');if isempty(colon) || colon == 1 || colon == length(txt{ii})continue;endfieldName = strtrim(txt{ii}(1:colon-1));fieldValue = strtrim(txt{ii}(colon+1:end));if isempty(fieldName) || isempty(fieldValue)continue;end% 是否为我们感兴趣的字段之一?idx = find(strcmpi(lookup(:,1), fieldName));if ~isempty(idx)newName = lookup{idx,2};info.(newName) = fieldValue;endend% 转换时钟速度info.Clock = [info.Clock, ' MHz'];% 转换核心数info.NumProcessors = str2double(info.NumProcessors);
%-------------------------------------------------------------------------function info = parseOSInfoText(txt)info = struct( ...'OSType', 'Linux', ...'OSVersion', '');% 查找字符串"linux version"然后查找括号内的内容[~, b] = regexp(txt, '[^(](([^)])).*', 'match', 'tokens', 'once');info.OSVersion = b{1}{1};
%-------------------------------------------------------------------------function txt = readCPUInfo()fid = fopen('/proc/cpuinfo', 'rt');if fid
输出结果如下登录后复制代码语言:javascript代码运行次数:0运行复制```javascript>> info = cpuinfo()info = 包含以下字段的 struct:Name: '12th Gen Intel(R) Core(TM) i5-12500H'Clock: '2500 MHz'Cache: '9216 KB'NumProcessors: 12OSType: 'Windows'OSVersion: 'Microsoft Windows 11 家庭中文版'
菜鸟下载发布此文仅为传递信息,不代表菜鸟下载认同其观点或证实其描述。
版权投诉请发邮件到 cn486com#outlook.com (把#改成@),我们会尽快处理
Copyright © 2019-2020 菜鸟下载(www.cn486.com).All Reserved | 备案号:湘ICP备2022003375号-1
本站资源均收集整理于互联网,其著作权归原作者所有,如有侵犯你的版权,请来信告知,我们将及时下架删除相应资源