在linux内核列表的实现中/include/linux/list.h
,container_of
宏的第一行(下面粘贴)背后的基本原理是什么?
const typeof( ((type *)0)->member ) *__mptr = (ptr);
Run Code Online (Sandbox Code Playgroud)
在我的示例代码中,我删除了这一行并将定义更改为
#define container_of(ptr, type, member) ({ \
(type *)( (char *)ptr - offsetof(type,member) );})
Run Code Online (Sandbox Code Playgroud)
我的代码仍显示预期的结果.那么第一行是多余的吗?或者它有一些我不知道的隐藏陷阱?
我在Faq/LinkedLists找到的代码
/**
* container_of - cast a member of a structure out to the containing structure
* @ptr: the pointer to the member.
* @type: the type of the container struct this is embedded in.
* @member: the name of the member within the struct.
*
*/
#define container_of(ptr, type, …
Run Code Online (Sandbox Code Playgroud) 在以下Makefile定义中:
$$@
在倒数第二行代表什么?|
中间的符号怎么样?define KERNEL_RULE
$(DESTDIR)/$(1) : kernel_modules
$(DEST_DIR)/$(1) : $(DESTDIR)/$(1) | $(DEST_DIR)
cp $(DESTDIR)/$(1) $$@
endef
Run Code Online (Sandbox Code Playgroud) 我想F2
用以下条目映射我的nerdtree:
map <F2> :NERDTreeToggle<CR>
Run Code Online (Sandbox Code Playgroud)
但即使在此之前,并且在保存vimrc之后,每当我按下时F2
,它只会切换光标所在字母的大小写.后来发现任何功能键都能做到.F5
切换5个字符的大小写等.这是因为其他一些插件吗?我目前使用c.vim,snippetsEmu,surround,nerdtree和minibufexpl
我的vimrc中的任何功能键都没有键映射.
我是Ruby的初学者,有这个问题唠叨了我很久.
在RSpec文件中,如果我们写Book.should <do something>
,should
关键字是什么?它是Book对象的成员吗?它是如何成为Book对象的成员的?或者它是Ruby的一些构造?这是一个功能吗?如果它是函数或成员,我在哪里可以找到它的定义?
如果您通常通过一个名为eth0的接口发送pcap的tcpreplay,则数据包是出站的,即将通过网卡发送.有什么方法可以让pcaps入站,以便我的系统应该将其作为入站数据包处理?
可能的情景
我有一个从eth0接收数据包的应用程序,从数据包中提取一些细节并通过eth1发送.现在情况很好,如果网络设置和真正的数据包实际流入我的系统.但是出于测试目的,我没有什么连接到我的eth0或eth1的端口,但我还是想创建一个PCAP(可能通过一个脚本)类似类型的流量,使我不必依靠外部物理网络连接上用于测试应用程序.
我已经开始在Unix v6上阅读狮子会评论.我偶然发现了这些片段,这些片段在C语言中从未见过.作者确实提供了某种解释,但有人可以向我解释这里发生了什么吗?
params.h
:
SW 0177570
......
struct { int integ; };
Run Code Online (Sandbox Code Playgroud)
这用于 unix/prf.c
if(SW->integ == 0)
Run Code Online (Sandbox Code Playgroud)
作者的解释
SW
之前定义为值0177570.这是只读处理器寄存器的内核地址,用于存储控制台交换机寄存器的设置.声明的含义很明确:获取位置0177570的内容并查看它们是否为零.问题是用C表达.代码if (SW == 0)
不会传达这个含义.显然SW
是一个应该被解除引用的指针值.编译器可能已被更改为接受,if (SW-> == 0)
但就目前而言,这在语法上是不正确的.通过发明具有元素的虚拟结构,integ
程序员已经找到了解决他的问题的令人满意的解决方案.
我的问题主要是这是如何工作的?当编译器看到时SW->integ
,它如何SW
与匿名结构相关联?
我一直在尝试创建一个期望脚本,通过telnet自动登录我的设备
如果expect命令没有多种可能性,则脚本工作正常,登录到设备.
#!/usr/bin/expect
set timeout 20
set ip [lindex $argv 0]
set port [lindex $argv 1]
set user [lindex $argv 2]
set password [lindex $argv 3]
spawn telnet $ip $port
expect "'^]'." sleep .1;
send "\r";
sleep .1;
expect "login:"
send "$user\r"
expect "Password:"
send "$password\r";
interact
Run Code Online (Sandbox Code Playgroud)
上面的脚本工作正常,并在我传递正确的参数时成功登录.但是,一旦我向expect命令添加了额外的分支(用于错误处理),脚本就会在提示符下卡住.login:
一段时间后它会打印脚本错误
任何帮助?下面的错误脚本.
#!/usr/bin/expect
set timeout 20
set ip [lindex $argv 0]
set port [lindex $argv 1]
set user [lindex $argv 2]
set password [lindex $argv 3]
spawn telnet $ip $port …
Run Code Online (Sandbox Code Playgroud) 当我尝试运行以下期望脚本时,它只是完成运行而不是等待用户输入.有人能告诉我我做错了什么吗?
#!/usr/bin/expect
puts -nonewline stdout "Enter device id:"
flush stdout
gets stdin id
puts -nonewline stdout "Enter device name:"
flush stdout
gets stdin name
Run Code Online (Sandbox Code Playgroud) 根据Mark Ransoms关于使用 memset 的回答,我在 a 上使用 memsetvector<int>
为所有元素分配值。
memset(&match_begin[0], 0xff , sizeof(match_begin[0]) * match_begin.size());
Run Code Online (Sandbox Code Playgroud)
它确实有显着的性能改进,std::fill
并且运行良好(g++ 4.3.2,64 位 linux)。这段代码是否安全,如中所示,std::vector 实现是否总是保证数据的内存分配是连续的?在 stl 库的未来(或不同)实现中,这是否有可能在以后更改并破坏我的代码?
我在http://lambda-the-ultimate.org/node/2064看到了这个术语“Glushkov NFA”。搜索引擎返回对使用 glushkov nfa 的文章的引用,但没有关于 glushkov nfa 本身的具体信息。
什么是格卢什科夫 NFA?它与 Thompson Construction 创建的 NFA 有什么不同?
c ×2
expect ×2
automata ×1
c++ ×1
keymapping ×1
linked-list ×1
linux ×1
linux-kernel ×1
makefile ×1
memset ×1
networking ×1
nfa ×1
pointers ×1
rspec ×1
ruby ×1
stl ×1
struct ×1
structure ×1
tcl ×1
telnet ×1
unix ×1
user-input ×1
vector ×1
vim ×1