- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试 inotify,下面的代码片段是我认为可以很好地演示其功能的代码:
#include <sys/inotify.h> /* inotify_init(), inotify_add_watch(), IN_* */
#include <stdlib.h> /* EXIT_SUCCESS, EXIT_FAILURE, malloc() */
#include <stdio.h> /* printf(), puts(), perror() */
#include <unistd.h> /* read() */
#include <sys/ioctl.h> /* ioctl, FIONREAD */
#define PTRY(expr) if((expr) == -1)
#define PGOTO(label, msg) do{\
perror(msg);\
goto label;\
} while(0)
int main(void) {
int fd;
PTRY(fd = inotify_init()) PGOTO(failure, "inotify_init");
PTRY(inotify_add_watch(fd, ".", IN_ALL_EVENTS)) PGOTO(failure, "inotify_add_watch");
while(1) {
unsigned int avail; /* We find out how large a buffer we need */
PTRY(ioctl(fd, FIONREAD, &avail)) PGOTO(failure, "ioctl");
char buffer[avail];
ssize_t count = read(fd, buffer, avail); /* We fill the buffer */
if(avail > 0 && count < avail) PGOTO(failure, "read");
printf("Avail: %d, Read: %d\n", (int)avail, (int)count);
if(avail > 0) puts("");
for(ssize_t i = 0; i < count; ) { /* For each event structure in the buffer */
struct inotify_event* event = (struct inotify_event*)buffer + i;
printf("Byte: %d - %d out of %d\n", (int)i, (int)(sizeof(struct inotify_event) + event->len), (int)count);
if(event->len > 0) { /* We print its contents */
printf("Name: %s\n", event->name);
} printf("Cookie: %d\n", event->cookie);
if(event->mask & IN_ACCESS) puts("IN_ACCESS");
if(event->mask & IN_ATTRIB) puts("IN_ATTRIB");
if(event->mask & IN_CLOSE_WRITE) puts("IN_CLOSE_WRITE");
if(event->mask & IN_CLOSE_NOWRITE) puts("IN_CLOSE_NOWRITE");
if(event->mask & IN_CREATE) puts("IN_CREATE");
if(event->mask & IN_DELETE) puts("IN_DELETE");
if(event->mask & IN_DELETE_SELF) puts("IN_DELETE_SELF");
if(event->mask & IN_MODIFY) puts("IN_MODIFY");
if(event->mask & IN_MOVE_SELF) puts("IN_MOVE_SELF");
if(event->mask & IN_MOVED_FROM) puts("IN_MOVED_FROM");
if(event->mask & IN_MOVED_TO) puts("IN_MOVED_TO");
if(event->mask & IN_OPEN) puts("IN_OPEN");
puts("");
i += sizeof(struct inotify_event) + event->len;
}
}
return EXIT_SUCCESS;
failure:
return EXIT_FAILURE;
}
但是,我从 read(2)
调用中收到了一些无关的记录,其中充满了二进制垃圾。附件是从 shell 调用 cat notifyTest.c
时程序的输出:
Avail: 0, Read: -1
Avail: 64, Read: 64
Byte: 0 - 32 out of 64
Name: notifyTest.c
Cookie: 0
IN_OPEN
Byte: 32 - 32783 out of 64
Name: ▒▒▒
Cookie: 1726459283
IN_ACCESS
IN_ATTRIB
IN_CLOSE_WRITE
IN_CLOSE_NOWRITE
IN_CREATE
IN_DELETE
IN_DELETE_SELF
IN_MODIFY
IN_MOVE_SELF
IN_MOVED_FROM
IN_MOVED_TO
IN_OPEN
Avail: 0, Read: -1
Avail: 32, Read: 32
Byte: 0 - 32 out of 32
Name: notifyTest.c
Cookie: 0
IN_CLOSE_NOWRITE
这可能会破坏代码,因为如果没有任何终止 ,进程将收到
静态分配缓冲区范围内的字符。SIGSEGV
信号并在读取 event->name
时被杀死\0'
这可能是一个怪癖,还是我只是做错了什么?我的 uname -a
是:
Linux witiko-D830 3.8.0-32-generic #47-Ubuntu SMP Tue Oct 1 22:35:23 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
对于可能出错的任何指示,我将不胜感激。
最佳答案
你的问题在这一行:
struct inotify_event* event = (struct inotify_event*)buffer + i;
该行将指针 buffer
转换为类型 struct inotify_event*
,然后添加 i
,这是在您的第二次迭代中, 是 32。然后将值增加 32 * sizeof(struct inotify_event)
。
修复方法是:
struct inotify_event* event = (struct inotify_event*)(buffer + i);
关于c - 读取 inotify 文件描述符会用二进制垃圾填充缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20182170/
padding:initial 比 padding:0 有什么优势吗?示例: textarea { padding: 0; } Hello, world! 最佳答案 它们的意思是一
我尝试通过按钮填充 JList,然后在先前填充的 Jlist 上使用 DoubleClick 填充 JTextField。 代码: private void extractUsedVariables
我正在尝试做 var width = ($(this).width() + $(this).css('padding-left') + $(this).css('padding-right' ));
我在导航中添加了悬停效果,遗憾的是悬停也影响了上面的文字。如何在不影响文本位置的情况下向导航添加悬停? 可悲的是,我找不到解决这个问题的方法。 HTML 模板:http://projects.help
我是 F# 初学者,下面代码中的 %-5s 和 %5s 有什么作用?我认为它提供了空间填充,但我不确定它是如何填充的? printfn "%-5s %5s" "a" "b" 当我尝试 prin
我需要选择带狗的用户(带 type 等于“狗”的宠物) var User = Waterline.Collection.extend({ identity: 'user', attribute
我一直在尝试让 Excel 在一组列上应用公式,然后将模式扩展到整个行集。 这导致了以下代码: For i = 0 To avgsheetNames.Count - 1 If Contains(CSt
随着 Flutter 2.0 的发布,FlatButton已被替换为 TextButton . 因此,填充属性不再直接可用,而是作为 ButtonStyle属性(property)。 我的问题是,我该
这似乎是一个简单的问题,但我已经尝试了一个小时,似乎无法弄清楚。 我要做的就是用 Canvas 填充 MainWindow。我找不到任何允许这样做的属性,我能想到的唯一方法是设置 Canvas.Wid
这是a website具有移动 View 。 网站宽度为 640 像素,但 iPhone 以 678 像素渲染文档。在 Android 中看起来很棒。 我添加了视口(viewport)元: 主体 C
我正在使用 GridBagLayout到(当前)显示两行。我知道这种布局对于这项任务来说太过分了,但我正在努力学习如何使用它。问题是我已将两个面板添加到两个单独的行中,并且内容周围存在巨大差距(请参见
我有以下代码已传递给我并创建多边形: var map; function initialize() { var myLatlng = new google.maps.LatLng(-36.4
我在 Jpanel 中有一些项目,然后将其推到顶部并用作基本搜索引擎的工具栏。我遇到一个问题,因为没有足够的空间,所以我的最后一个组合框没有显示。但是,左侧有很多空白空间,我需要移动所有内容来填充 J
我创建了带有阈值的二进制图像。如下图所示如何改变白色形状的颜色以使其可索引? 到目前为止,这是我的代码: void threshold() { cv::Mat src_8uc3_img = c
我有一个 JTable,我想知道是否有更好的方法来填充它,这是我的代码: //Metodo para llenar un jtable con datos de la base public stat
我想要做的是裁剪一个卷以删除所有不相关的数据。例如,假设我有一个 100x100x100 的体积,其中填充了 0,但其中的 50x50x50 体积则填充了 1。如何从原始体积中获得裁剪后的 50x50
因此,我正在创建一种对一组数字进行洗牌的方法,其想法是创建这些数字的总体。因此,我创建了一个循环,对数字进行洗牌,然后将其添加到数组列表中,但是经过一些调试语句后,我发现它确实对数字进行洗牌,但只将最
假设我有这两个类: public class A where T : IEntityWithID, new() { private static EntityInfo entityInfo =
我正在尝试添加用户输入的两个大整数作为字符串。当两个输入字符串的长度不同时,我尝试用零填充较短的数字,但它不起作用。因此,如果我输入 456 和 7,它会给出 3,前面有一些随机字符。感谢您的任何建议
这是我将内容打印到表格 View 的代码 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: Index
我是一名优秀的程序员,十分优秀!