Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MATLAB中获取(一致的)计算机名_Matlab_Hostname - Fatal编程技术网

在MATLAB中获取(一致的)计算机名

在MATLAB中获取(一致的)计算机名,matlab,hostname,Matlab,Hostname,我偶尔需要根据它运行的机器定制MATLAB脚本。我通常使用以下命令获取计算机名: char(getHostName(java.net.InetAddress.getLocalHost) 在大多数情况下,这会返回计算机名。然而,我的笔记本电脑(MacBook)因连接的网络而异 是否有一种方法可以检索计算机的某种唯一标识符,该标识符不会因所连接的网络而改变 更新:我忘了提到我正在寻找一个独立于操作系统的解决方案。我需要找到一个可以在Mac、PC或Linux上运行的命令。一个独立于网络的好标识符是M

我偶尔需要根据它运行的机器定制MATLAB脚本。我通常使用以下命令获取计算机名:

char(getHostName(java.net.InetAddress.getLocalHost)
在大多数情况下,这会返回计算机名。然而,我的笔记本电脑(MacBook)因连接的网络而异

是否有一种方法可以检索计算机的某种唯一标识符,该标识符不会因所连接的网络而改变


更新:我忘了提到我正在寻找一个独立于操作系统的解决方案。我需要找到一个可以在Mac、PC或Linux上运行的命令。

一个独立于网络的好标识符是
Mac地址(与macbook无关)。每台计算机都有一个唯一的MAC地址。您可以在MATLAB上通过以下命令获得:

system('ifconfig en0 | grep ether')
您将在输出中看到类似的内容:

ether 80:e6:50:28:76:d0 

您可以按照建议使用计算机网卡的硬件地址,使用以下Matlab代码提取它:

not_win=true;
switch computer('arch')
    case {'maci','maci64'}
        [~,mac_add]=system('ifconfig |grep ether | grep -o -E "([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}"');
    case {'glnx86','glnxa64'}
        [~,mac_add]=system('ifconfig  | grep HWaddr | grep -o -E "([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}"');
    case {'win32','win64'}
        not_win=false;
        sid = '';
        ni = java.net.NetworkInterface.getNetworkInterfaces;
        while ni.hasMoreElements
            addr = ni.nextElement.getHardwareAddress;
            if ~isempty(addr)
                sid = [sid, '.', sprintf('%.2X', typecast(addr, 'uint8'))];
            end
        end
    otherwise, error('Unknown architecture')
end

if(not_win)
    mac_add=regexprep(mac_add,'\r\n|\n|\r','.');
    sid=upper(strrep(mac_add(1:end-1),':',''));
end
sid
变量包含您要查找的唯一标识符。 您必须检测机器的体系结构,因为java.net.NetworkInterface.getNetworkInterfaces不能在Unix上正常工作,只返回正在运行的接口;因此,您必须收集解析ifconfig结果的mac地址(查看一些示例)


注意!在Mac上,如果启动虚拟机,可能会添加假网络接口,因此sid可能会更改。

我对Mac协议不太了解,但名称的更改取决于网络,而不仅仅是后缀(名称的前缀保持不变)?唉,我不得不取消接受这个答案,当我移动位置并连接到新网络时,
sid
变量就会改变。这个问题涉及函数java.net.NetworkInterface.getNetworkInterfaces,在Unix系统上,它只返回正在运行的接口。因此,如果您将不同的接口连接到网络,您将获得不同的sid;但是,从技术上讲,标识符独立于特定的网络。我已经更新了答案。这个版本适合你的需要吗?