LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: kj501

用C语言得到本机的硬件地址

[复制链接]
发表于 2003-6-1 01:07:32 | 显示全部楼层
建议看 UNP v1
发表于 2003-7-11 09:35:39 | 显示全部楼层
我对linux下的网络编程有相当丰富的经验
发表于 2003-7-11 10:52:05 | 显示全部楼层
#if,#else,#endif
这些是条件编译语句

1.条件编译

#ifdef 标识符

 语句序列

#endif



#ifndef 标识符

 语句序列

#endif



#ifdef 标识符

 语句序列 1

#else

 语句序列 2

#endif



#ifdef 表达式

 语句序列 1

#else

 语句序列 2

#endif



请看它们的解释:



主要规则



#if 常量表达式

检查常量表达式计算值是否为非 0。



#ifdef 标识符

检查标识符当前是否预定义过。

#else

else_语句序列;

#endif

当前表达式为假时, else_语句序列将被编译。


#undef 标识符

如果标识符以前定义过, 那么

#undef

后, 标识符就被编译器认为是未定义的了。
发表于 2003-7-11 10:56:39 | 显示全部楼层
能否就Liunx网络编程开个大讨论,套接字问题很有用的哟
发表于 2003-7-12 14:59:05 | 显示全部楼层
我有写过搜索跟本机处于同一个局域网中所有活动主机的IP地址,及MAC地址的程序,当然如果你有多个ethernet网卡,也可以全部搜索出来
自由狼-台风 该用户已被删除
发表于 2003-7-12 17:40:41 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2003-7-15 21:53:43 | 显示全部楼层
SIOCGIFCONF是什么意思啊?
发表于 2009-1-20 00:11:40 | 显示全部楼层
ifc.ifc_len = sizeof buf;
原来sizeof可以这样用?!!又可以省一个符号了。呵呵
回复 支持 反对

使用道具 举报

发表于 2009-1-20 09:07:12 | 显示全部楼层
我还以为是靠得/proc或者/sys呢
我也找到一个,不知道行不行,这个是我Google来的。
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <sys/ioctl.h>
  5. #include <sys/socket.h>
  6. #include <sys/types.h>
  7. #include <net/if.h>
  8. #include <arpa/inet.h>
  9. int main(void)
  10. {
  11.    int sfd;
  12.    unsigned char *u;
  13.    struct ifreq ifr;
  14.    struct sockaddr_in *sin = (struct sockaddr_in *) &ifr.ifr_addr;
  15.    memset(&ifr, 0, sizeof ifr);
  16.    if (0 > (sfd = socket(AF_INET, SOCK_STREAM, 0))) {
  17.      perror("socket()");
  18.      exit(EXIT_FAILURE);
  19.    }
  20.    strcpy(ifr.ifr_name, "eth0");
  21.    sin->sin_family = AF_INET;
  22.    if (0 == ioctl(sfd, SIOCGIFADDR, &ifr)) {
  23.      printf("%s: %s\n", ifr.ifr_name, inet_ntoa(sin->sin_addr));
  24.    }
  25.    if (0 > ioctl(sfd, SIOCGIFHWADDR, &ifr)) {
  26.      return EXIT_FAILURE;
  27.    }
  28.    u = (unsigned char *) &ifr.ifr_addr.sa_data;
  29.    if (u[0] + u[1] + u[2] + u[3] + u[4] + u[5]) {
  30.      printf("HW Address: %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x\n",
  31.             u[0], u[1], u[2], u[3], u[4], u[5]);
  32.    }
  33.    return EXIT_SUCCESS;
  34. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表