gethostname的背后机制

有些应用在启动的过程中为了更友好的展示,会自动去获取当前机器的hostname,这时会调用到gethostname系统调用,通过man gethostname可以查看其详情,但其背后又是怎样一个流程呢?我们通过strace来看一下。

先上一个简单的代码,用于获取hostname。

#include <stdio.h>
#include <stdlib.h>

int main(void) {

    char hostname[1024];
    gethostname(hostname, 1024);

    puts(hostname);

    return EXIT_SUCCESS;
}

然后执行如下的命令

gcc gethostname.c -o gethostname
strace ./gethostname

输出结果如下:

execve("./gethostname", ["./gethostname"], [/* 23 vars */]) = 0
brk(0)                                  = 0x25fb000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b89ec0e2000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=44475, ...}) = 0
mmap(NULL, 44475, PROT_READ, MAP_PRIVATE, 3, 0) = 0x2b89ec0e3000
close(3)                                = 0
open("/lib64/libc.so.6", O_RDONLY)      = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0p\356\241\0068\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1926760, ...}) = 0
......
uname({sys="Linux", node="yourhost", ...}) = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b89ec0e3000
write(1, "yourhost\n", 26yourhost
) = 26
exit_group(0)

其中有一条uname的系统调用,如果我们执行uname -n,可以得到当前机器的hostname。所以原理就在这里,最后,strace是个好东西。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 14,263评论 2 33
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,833评论 19 139
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,996评论 9 468
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 14,752评论 0 15
  • 我的宝贝你现在八个多月了。你这段时间本领可大了不少,想坐就坐,想爬就撒了欢的爬追都追不上,还能扶着东西自己站起来。...
    雕琢时光925阅读 1,787评论 0 0

友情链接更多精彩内容