程序编码
iovec
今天认识了一个新的数据结构,也是老朋友了。初见应该是在交叉编译apr(一个似乎和网络相关的库,不是很清楚)的时候。
当时编译需要修改iovec相关的一些参数。 我当时还想着这是不是程序员埋的彩蛋呢!!i love c! 好家伙今天一看原来是iovec😅😅😅
那这玩意到底是干啥来着的呢!!!我早该想到的!!
iovec = io ! vec! 是用于io通信过程中携带数据的,配套使用的readv & writev perform vectorized I/O operations
他的具体结构是这样的
1 2 3 4 5
| struct iovec { void *iov_base; // Starting address of the buffer size_t iov_len; // Number of bytes to transfer }; //比较直观,里面一个指针一个长度。足够标识一片空间
|
这个数据结构一般和readv和writev合用,可以对某个文件描述符代表的文件空间读取或写入数据,这也是我今天遇到的函数
1 2 3 4
| struct iovec iov[2]; ssize_t iReadNum = readv(fd, iov, 2);// read ssize_t iWriteNum = writev(fd, iov, 2);//write //参数:fd -> 用于通信的文件描述符, iov -> iovec变量 2 -> iovec结构的个数
|
命令操作
tcpdump
在各种通信过程中,为了对报文深入分析,抓包是最基本的操作。通常在PC端都会使用wireshark来抓,好用!!
可是我板子咋抓呢!!!!
叮叮叮 tcpdump
1 2
| tcpdump -i eth0 -w output.pcap host xxx.xxx.xxx.xxx and port xxx // -i 指定要抓包的网卡 -w 指定抓包文件的输出包 host/port 为远程机的ip和端口
|
1 2
| tcpdump -r output.pcap -XX -A // 可以在板子上直接浏览抓到的报文,不过不太好看, 建议拷出来放到wireshark里面看
|
概念知识