关于hostname的事情,我不知道是存放在系统的什么地方的,想知道时却发现是通过系统调用gethostname实现的,给系统调用在linux上只要包含<unistd.h>,就可以使用;
但是在windows上就没有在这个里面,windows上我没有使用visual studio,而是下载了一个dev-c++;因为对于命令行的东西比较熟悉一些,同样的程序在linux上是没问题的,但是在windows上就是编译不过去;
代码如下:
#include <unistd.h>
#include <iostream>
using namespace std;
int main(int ac, char ** av) {
char name[256];
size_t len = 256;
gethostname(name, len);
cout << name << endl;
return 0;
}
在windows上需要添加:
#include <winsock2.h>
而在编译时也需要把libwsock32.a 带上,如:
g++ -L D:\Program\DEV-CPP\Lib -o gethostname gethostname.cpp D:\Program\DEV-CPP\Lib\libwsock32.a
你可能会问,为什么已经使用了-L了libwsock32.a还要使用全路径,这个我也不知道,反正不给全路径就是找不到该文件。
虽然windows上也编译成功了,但是输出的结果却不是hostname命令所看到的,难道是这个libwsock32.a里面的gethostname的实现和hostname命令不太一样?通过denpendency woker这个小软件查了一下,使用的是同一个dll中的系统调用。 为什么结果不一样就不知道了,windows上的东西就是不好查。