Linux获取本机IP、MAC示例程序
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <stdio.h>
#include <string>
#include <iostream>
#include <cstring>
using namespace std;
void peek_interfaces(int fd);
void print_hw_addr(int fd, const char* if_name);
int main() {
int fd = socket(AF_INET, SOCK_DGRAM, 0);
if(-1 == fd) {
perror("Failed create socket.");
return -1;
}
peek_interfaces(fd);
close(fd);
return 0;
}
void peek_interfaces(int fd) {
ifreq ifs[16] = {0};
ifconf conf = {sizeof(ifs)};
conf.ifc_req = ifs;
if(-1 == ioctl(fd, SIOCGIFCONF, &conf)) {
perror("Failed IOCTL SIOCGIFCONF.");
return;
}
if(conf.ifc_len >= sizeof(ifs)) {
perror("Buffer too small for IOCTL SIOCGIFCONF.");
return;
}
int num = conf.ifc_len / sizeof(ifreq);
cout << num << " interface entry retrieved." << endl;
for(int i = 0; i < num; ++i) {
cout << "[ " << ifs[i].ifr_name << " ]" << endl;
sockaddr_in* sai = (sockaddr_in*)&ifs[i].ifr_addr;
cout << "Addr: " << inet_ntoa(sai->sin_addr) << endl;
print_hw_addr(fd, ifs[i].ifr_name);
cout << endl;
}
}
void print_hw_addr(int fd, const char* if_name) {
ifreq req = {0};
strcpy(req.ifr_name, if_name);
if(-1 == ioctl(fd, SIOCGIFFLAGS, &req)) {
perror("Failed IOCTL SIOCGIFFLAGS.");
return;
}
if(req.ifr_flags & IFF_LOOPBACK) {
cout << "Is LOOPBACK." << endl;
return;
}
if(-1 == ioctl(fd, SIOCGIFHWADDR, &req)) {
perror("Failed IOCTL SIOCGIFHWADDR.");
return;
}
unsigned char* puc = (unsigned char*)req.ifr_hwaddr.sa_data;
printf("HW addr: %02x:%02x:%02x:%02x:%02x:%02x\n",
puc[0], puc[1], puc[2], puc[3], puc[4], puc[5]);
}
相关文档:
Linux网络管理员应聘考试题(含答案)
一.填空题:
(加粗的文字为该题的答案)
1. 在Linux系统中,以 文件
方式访问设备 。
2. Linux内核引导时,从文件 /etc/fstab
中读取要加载的文件系统。
3. Linux文件系统中每个文件用 i节点
来标识。
4. 全部磁盘块由四个部分组成,分别为引导块 、专用块 、 i节点表块 ......
脚本文件 backup.sh
#!/bin/sh
a=`date "+%y_%m%d_%H%M"`
echo $a
/home/oracle/10g/bin/exp username@password@//192.168.0.126/SID owner=username FILE=/opt/beifen/126_username_$a.dmp
备份的文件格式如:126_username_09_0920_2300.dmp
编写完shell脚本之后,要对其赋予可执行权限及其用户所属:
# chmod 7 ......
转自:
http://www.ibm.com/developerworks/cn/linux/kernel/syscall/part1/appendix.html
本文列出了大部分常见的Linux系统调用,并附有简要中文说明。
以下是Linux系统调用的一个列表,包含了大部分常用系统调用和由系统调用派生出的的函数。这可能是你在互联网上所能看到的唯一一篇中文注释的Linux系统调用列表,即使 ......
Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。之后可以自动或手动挂载其他的文件系统。因此,一个系统中可以同时存在不同的文件系统。不同的文件系统类型有不同的特点,因而根据存储设备的硬件特性、系统需求等有不同 ......
NO
分类
PS1
命令名
用法及参数
功能注解
1
显示目录信息
#
ls
ls -a
列出当前目录下的所有文件,包括以.头的隐含文件
#
ls
ls -l或ll
列出当前目录下文件的详细信息
#
ls
ls -a
显示所有文件,包含隐藏。
#
ls
ls -al
显示所有文件的详细信息。
2
查看路径
#
pwd
pwd
......