将 Unix hostid 获取到 Java 中
如何通过某种调用将 unix hostid 转换为 Java?
How can I get the unix hostid into Java through some sort of call?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如何通过某种调用将 unix hostid 转换为 Java?
How can I get the unix hostid into Java through some sort of call?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(5)
如果它是通过之前调用
sethostid(long int id)
设置的,它将驻留在HOSTIDFILE
中,通常是/etc/hostid
。如果不存在,则获取计算机的主机名。您提取主机名的地址,如果是 IPv4,则它是从点分十进制格式转换为二进制格式的 IPv4 地址,其中高 16 位和低 16 位交换。
If it has been set by a previous call to
sethostid(long int id)
it will reside in theHOSTIDFILE
, typically/etc/hostid
.If it is not there, you fetch the machine's hostname. You pull out the address for the hostname, and if that's IPv4, it is the IPv4 address formatted from dotted decimal to binary with the top 16 bits and the lower 16 bits swapped.
恐怕你必须编写 JNI(或 JNA)。
You're going to have to write JNI (or JNA), I'm afraid.
也许下面的文章会有所帮助。
http://www.devdaily.com/java/java-exec-processbuilder -进程-1
Perhaps the following article will help.
http://www.devdaily.com/java/java-exec-processbuilder-process-1
调用
Runtime.exec(String)
其中参数是“hostid”可执行文件的路径,然后排出生成的Process
对象并将标准输出流的内容作为字符串值。这个简单的类演示了如何实现此策略(但需要改进错误处理 [例如 stderr、异常] 和 OOP 最佳实践 [例如返回具有 bean 属性的对象等]):
您的程序可以这样使用它:
请注意,使用
ProcessBuilder
创建如果您的命令需要参数或环境等,Process
可能比Runtime.exec()
更合适。Call
Runtime.exec(String)
where the argument is the path to the "hostid" executable then, drain both streams of the resultingProcess
object and take the contents of the standard output stream as your string value.This simple class demonstrates how you could implement this strategy (but needs improvement for error handling [e.g. stderr, exceptions] and OOP best-practices [e.g. returning an object with bean properties, etc.]):
Your program could use it as such:
Note that using a
ProcessBuilder
to create theProcess
might be more appropriate thanRuntime.exec()
if your command needs arguments or an environment, etc.试试这个(当然,包装在某个类中):
该方法返回“xxx.xxx.xxx.xxx”形式的字符串。
更新
一种改进的方法是:
Try this (wrapped in some class, of course):
The method returns a string of the form "xxx.xxx.xxx.xxx".
UPDATE
An improved method is: