char buf[BUF_LEN]_attribute_((aligned(4)));
ssize_t len, i = 0;
/* read BUF_LEN bytes' worth of events */
len = read (fd, buf, BUF_LEN);
/* loop over every read event until none remain */
while (i < len) {
struct inotify_event *event =
(struct inotify_event *) &buf[i];
Monitoring File Events | 239
printf ("wd=%d mask=%d cookie=%d len=%d dir=%s\n",
event->wd, event->mask,
event->cookie, event->len,
(event->mask & IN_ISDIR) ? "yes" : "no");
/* if there is a name, print it */
if (event->len)
printf ("name=%s\n", event->name);
/* update the index to the start of the next event */
i += sizeof (struct inotify_event) + event->len;
}
答案 0 :(得分:2)
char buf[BUF_LEN]_attribute_((aligned(4)));
它指定变量buf
的最小对齐,以字节为单位
它使编译器在4字节边界上分配变量buf
。
This 应该是一个很好的阅读。
答案 1 :(得分:1)
这使得在4字节边界上分配给buf的内存对齐。这可以加速CPU和主存储器之间的内存传输等。
答案 2 :(得分:1)
该指令告诉编译器将缓冲区放在一个四个字节的倍数的地址上。
在某些处理器上,这没有任何影响,如果你不是一次只读取一个字节而是读取2,4或8(16,32和64位),那么在其他处理器上它会加速内存访问。某些处理器甚至需要进行2,4或8字节访问(否则会发生总线错误)。
在这种情况下,这确实是相关的,因为缓冲区稍后作为一系列inotify_event
结构进行访问,其中包含作为16位,32位或64位值访问的成员。