Linux 中获得本机网卡MAC地址很简单,ioctl()就OK。可如何获得局域网其他主机的MAC地址呢…链路层广播ARP请求,然后接收ARP响应。实现介个功能其实已有现成三方库可用,如libnet。不过想加深对协议的理解和Linux网络编程API的理解,jiayi 还是决定用Linux的PF_PACKET自己实现,改啊改,终于成功~以下是大体思路
1. 为数据报分配空间,创建相应的结构体 req,arp 数据报的帧格式如图

2. 创建 PF_PACKET 原始套接字,发送套接字为 reqfd,接收套接字为 recvfd
3. 填写链路层通用结构体 reqsa
3. get_ifi()获取本机网络接口数据,填写要发送的ARP数据报 req 结构体,sendto()发送
4. 循环recvfrom()接收ARP响应,滤掉经由本地接口的其他ARP数据报
发送ARP请求能做的事不仅仅获取MAC地址吧…其他“有意义”的事也可以尝试一………
考完最后一科,嘎嘎,终于考完了~这个学期再也不敢懈怠考试了,抓了一段功课,有些效果。。恩,博客恢复更新~
说说C语言的 struct 吧。虽然基本,但有些东西还是挺有意思的。先看看 struct 的地址有哪些有意思的东西吧~
下面有一段代码,其中先给出一个 _student 结构体,声明后付初值。用 struct 的”点(.)”操作符打印其中 name 对象的地址与字符串。然后通过类似 struct 0 地址寻址的方式打,这里给了四句话,其中一句用“毒瘤”注释,说明不可取…最后我们在struct 寻址的基础上截取打印 name 字符串,唔,这里有两句“毒瘤”。
#include<stdio.h>
int main()
{
struct _student {
int sex;
char*name;
}
………
话说一个支持作业控制的 Linux 终端下有 作业1,我们把他放到后台,终端执行 kill %1 ,恩,我们知道它把 作业1 杀掉了。但它只杀掉了 作业1 吗?那可不一定……
首先,作业(job) 指的是 进程组(process group),一个作业就是一个进程组。进程组 是什么,A process group is a collection of one or more processes, usually associated with the same job,that can receive signals from the same terminal。明白了两者各自的定义,很容易看到他们是相通的。把进程组抽象成作业,一个主要目的是便于操控。因此作业控制可以看作进程组控制,只不过更简便了,但作业控制有时却不能按照我们的意愿工作。
下面给出一段程序加以说明
第一个程序命名 job_control.c,第二个程序命名 job_control_1.c
/* job_control.c */
#include<sys/types.h>
#include&l
………
Expect 手册 中文版
本文由gunman翻译,在此感谢~
EXPECT(1)
名字:
Expect—–能与交互式程序进行“可程序化”会话的脚本语言
大纲:
(命令选项概述)
expect [ -dDinN ] [ -c cmds ] [ -[f|b] ] cmdfile ] [ args ]
概述:
Expect是一种能够按照脚本内容里面设定的方式与交互式程序进行“会话”的程序。根据脚本内容,Expect可以知道程序会提示或反馈什么内容以及 什么是正确的应答。它是一种可以提供“分支和嵌套结构”来引导程序流程的解释型脚本语言。另外,还可以在随时需要的时候把控制权交给用户,然后再还给脚 本。
ExpectK是Expect和Tk的混合体。它就按照Expect和Tk的………
汇编确实够傻,平时百用不爽的类似 printf("%dn",i) 的输出数字竟找不到现成的实现…汇编系统调用默认输出的是其ASCII码…
输出数字,在学习编程语言的时候还是经常用到的,比如比较个大小,排个序…一时间不能输出,郁闷至极,遂写个程序实现 有符号整形 的输出。因为学习汇编不久,像宏的实现,函数的调用当作练手之用都堆了上去,所以程序显得比较臃肿、业余。。。
环境:Linux NASM+ald (因为NASM 支持的intel 汇编和上课学的DOS下汇编语法差不多,为了考试,先用它。AT&T以后再说……
),NASM 的具体应用请看其手册:http://www.nasm.us/doc/nasmdoc0.html 。 ald 看其帮助即可
下面的程序将 val 中的数值输出
;print_int.asm
SECTION .DATA
val DD -10H
len EQU $-val
 
………
As eople say, the old signal() had number of problems:1. The disposition for a signal was automatically reset to its defualt each time the signal occured. So we had to reestablish the handler on catching the signal. 2.There is, however, another subtle problem after reestablish the handler: There is a window of time –after the signal has occured,but before the call to signal in the signal handler. If the same signal occured int the window of time, it would cause the default action to occur and ………


