小编dmy*_*ush的帖子

如何在较少搜索手册页中指示行的开始?

我经常提到 man bash 来回忆“历史扩展”部分(事件/单词/修饰符)的使用。我知道我需要的男人部分是“历史扩展”。所以我输入HISTORY EXPANSION前向搜索列表'/'。当然,less 不是直接跳转到“HISTORY EXPANSION”部分,而是显示给定人中此字符串的所有出现。因此,我认为输入以下内容会很棒:

/^HISTORY EXPANSION
Run Code Online (Sandbox Code Playgroud)

所以我可以跳到“行首”历史扩展。

既不工作/^HISTORY EXPANSION也不/\^HISTORY EXPANSION工作

在少人我看到...

/pattern
在文件中向前搜索包含该模式的第 N 行。N 默认为 1。该模式是一个正则表达式,由您的系统提供的正则表达式库识别。

我看到其他人也在研究这个,但目的不同:https : //stackoverflow.com/questions/14698364/what-is-the-regular-expression-library-supplied-by-my-system

我按照步骤操作,但仍然无法确定我的机器上使用的是哪个正则表达式版本。这是较少二进制文件的共享库依赖项输出

$ ldd /usr/bin/less
linux-vdso.so.1 =>  (0x00007ffc229cb000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f44968e9000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4496524000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4496b12000)
Run Code Online (Sandbox Code Playgroud)

那么,如何在较少的搜索中指示行的开始,以便我可以轻松跳转到我需要的 man 部分?

less man regular-expression

5
推荐指数
1
解决办法
2431
查看次数

为什么以太网帧中 IP 协议的协议类型值为 8?

我正在编写一个简单的数据包处理程序。这是代码摘录:

void print_ethernet_header(unsigned char* buffer)
{
        struct ethhdr *eth = (struct ethhdr *)buffer;
        fprintf(logfile , "   |-Protocol  : %x \n",eth->h_proto);
}
Run Code Online (Sandbox Code Playgroud)

这个简单的函数应该将协议类型的十六进制值打印到日志文件。确实它确实打印了值“8”。但是,在源 /usr/include/net/ethernet.h 和在线(https://en.wikipedia.org/wiki/EtherType)中,我看到 IP 协议类型定义为 0x0800。所以我实际上希望看到值 800(十六进制)或 2048(十进制)被打印到文件,而不是 8。我认为这可能与字节顺序有关,并且需要从网络字节顺序转换为主机,但在 recvfrom() 手册页中没有找到任何关于此的信息。这是填充缓冲区变量的调用:

sock_raw = socket(AF_PACKET,SOCK_RAW,htons(ETH_P_ALL));
//some code here...
data_size = recvfrom(sock_raw , buffer , bufsize , 0 , (struct sockaddr*)&saddr , (socklen_t*)&saddr_size);
Run Code Online (Sandbox Code Playgroud)

我使用的机器是 little-endian (Ubuntu 16.04)。为什么协议类型显示为 8 ?

networking c socket

0
推荐指数
1
解决办法
1019
查看次数

标签 统计

c ×1

less ×1

man ×1

networking ×1

regular-expression ×1

socket ×1