C/C++程序中的event该如何理解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++程序中的event该如何理解相关的知识,希望对你有一定的参考价值。
参考技术A c c++并没有event功能。不过一些事件循环框架 例如windows 的核心库和qt这类是有event的。 还有很多项目也用到event这个概念,这个玩意就是设计上的一个概念, 一般来说是用来降低耦合的, 比如我写了一个模块用来做IO, 成功后会发一个event, coordinator收到这个event会调用其他业务逻辑模块来做一些操作。 这种设计在C语言项目中比较多, 因为C语言的项目层次结构一般比较散比较平, 不太好做成层次结构, 需要消息队列这类手段来协调各种功能。
使用inotify 帮助理解代码的C 程序
【中文标题】使用inotify 帮助理解代码的C 程序【英文标题】:C program using inotify help in understanding code 【发布时间】:2016-01-23 19:19:14 【问题描述】:我指的是inotify 的手册页,我遇到了这段代码
if (event->mask & IN_ISDIR)
printf(" [directory]\n");
else
printf(" [file]\n");
其中 event 是指向结构 inotify_event
的指针。
我无法理解这一行 if (event->mask & IN_ISDIR)
以及为什么在此处使用 bitwise AND
。
如何确定bitwise AND
应该在这里使用而不是其他? inotify 的手册页中没有提到它。
【问题讨论】:
您链接的页面显示 “可能在 read(2) 返回的掩码字段中设置以下位:... IN_ISDIR 此事件的主题是目录。” 这是一个不同的函数,但表明这是一个位域。 【参考方案1】:这个按位与屏蔽了一个特定的位 (IN_ISDIR
)。它正在测试是否设置了这一位。如果在event->mask
中设置了此位,则计算结果为真。
例如,
#include <stdio.h>
#define FIRST_BIT 1
#define SECOND_BIT 2
#define THIRD_BIT 4
int main()
int x = 3; /* 3 in binary is 011 */
if ( x & FIRST_BIT )
printf("First bit is set\n");
if ( x & SECOND_BIT )
printf("Second bit is set\n");
if ( x & THIRD_BIT )
printf("Third bit is set\n");
会给出输出
First bit is set
Second bit is set
来自inotify.h
:
#define IN_ISDIR 0x40000000 /* event occurred against dir */
这个值只设置了一位。 (在二进制中,这是01000000000000000000000000000000
。)与此(0x40000000)和某个变量的按位与将评估为0(如果变量在这里有0),或者如果变量在同一个地方有1,则为0x40000000。任何非零值都被认为是“真”。
从逻辑上讲,它正在测试event
是否来自目录(而不是文件)。
【讨论】:
干净整洁。谢谢@e0k【参考方案2】:按位与只是检查是否设置了特定位的一种简单(并且非常常见)的方法。 手册页很清楚,如果设置了该位,则该事件是指一个目录。
【讨论】:
以上是关于C/C++程序中的event该如何理解的主要内容,如果未能解决你的问题,请参考以下文章
C/C++中我读取一个文本,如何正确的判断此文本已经读完,用feof会多循环一次,该如何解决
AUTO在C语言中的用法,下面小程序NUM编译结果是怎样的,该怎样理解?
MyEclipse 如何用java 开发C/S程序,最好给个简单的例子 先谢谢了