Linux C++ 中的后台程序

Background program in C++ for Linux

本文关键字:后台 程序 C++ Linux      更新时间:2023-10-16

我不确定应该使用什么关键字来搜索这个,所以我要在这里问。如果这是重复的,我很抱歉。

基本上,我想做以下事情

./my_prog &

其中my_prog,编码为 C++14,

  • 每当我右键单击时,都会向文件 A 添加一个字符。
  • 每当我左键单击时,都会向文件 B 添加一个字符。
  • 每当我按下某个键时,都会向文件 C 添加一个字符。

(这将使我能够看到我在一天结束时执行上述任何操作的频率。

首先我想使用Qt,但不久之后我意识到Qt只在自己的窗口中这样做。(或者至少,这是我能用的。这无济于事,因为我宁愿my_prog计算每次点击和按键。

有人知道我应该使用什么库/函数吗?谢谢。

您需要在 Linux 中读取鼠标设备。在我的 Ubuntu 中,该设备是"/dev/input/event4",您可以从"/proc/bus/input/devices"检查您的设备。

在 linux/input.h 标头中,您可以找到可用于处理不同鼠标事件的"input_event"结构。

这是一个简单的例子

#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <time.h>
#include <linux/input.h>
#define MOUSEFILE "/dev/input/event4"
int main()
{
int fd;
struct input_event ie;
if((fd = open(MOUSEFILE, O_RDONLY)) == -1) {
perror("Cannot access mouse device");
exit(EXIT_FAILURE);
}
while(read(fd, &ie, sizeof(struct input_event))) {
printf("%d, %d, %dn", ie.type, ie.value, ie.code);
}
return 0;

}

您可以从 http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/include/linux/input.h?v=2.6.11.8 中找到有关input_event结构和代码定义的更多信息

例如,在我的机器中,我意识到当我左键单击鼠标时,会发生以下组合

ie.type = 1
ie.value = 1
ie.code = 272

这有助于捕获 Linux 中的不同事件。