c++ - 以用户身份而非 sudo 身份运行时 libusb 1.0 程序中的段错误

标签 c++ linux cimg libusb-1.0

我正在编写一个使用 libusb 的相机捕获程序1.0 和 cImg。它连接到我的 Atik 314L天文相机并捕获图像以显示在屏幕上。它在以普通用户或 super 用户身份编译时编译良好,在以根用户身份执行时运行良好,但生成 segmentation fault。当以任何其他方式运行时。

我正在使用 Code::Blocks ,调用栈显示调用usb_control_msg()函数时发生段错误:

#0 (usb_control_msg(dev=0x0, requesttype=64, request=160, value=58880, index=0 bytes=0x7fffffffe5df "\001 \346\377\377\377\177", size=1, timeout=500) (linux.c:152)

我对在 Linux 环境中编程还比较陌生,我不确定如何才能让普通用户运行它。以下是我到目前为止尝试过的步骤:

  1. 将我的用户添加到所有用户组以查看是否是组权限问题(哎呀——我什至尝试将自己添加到“root”,但它没有做任何事情)
  2. /etc/udev/rules.d 添加一条规则,内容有点像这样:PROGRAM="/home/[username]/git/camera/prog", MODE="0660", GROUP="相机"
  3. 尝试将程序本身的权限更改为 777。不过那是最后的努力——我真的没想到它会起作用。

我正在学习如何调试,所以如果您需要日志或任何东西来查看问题所在,请告诉我。

最佳答案

您可能需要使用类似fnctl() 的函数来设置/获取设备的标志,并且根据您的要求,您可以设置文件访问模式(O_RDONLY/O_WRONLY/O_RDWR) 和文件创建标志 (O_CREAT/O_EXCL/O_NOCTTY/O_TRUNC)。但是,在 Linux 上,此命令只能更改 O_APPEND、O_ASYNC、O_DIRECT、O_NOATIMEO_NONBLOCK 标志。

关于c++ - 以用户身份而非 sudo 身份运行时 libusb 1.0 程序中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17240061/

相关文章:

linux - docker 容器写入挂载卷的文件的所有权

c++ - 使用 CImg 在 C++ 中进行光谱残余显着性检测

c++ - 将图像放置在较大图像的特定位置

linux - 在 Ubuntu 上安装 Gnuplot 5.0

linux - 等待/dev/disk/by-label 在 SD 插入后填充

c++ - CImg 错误 : 'gm.exe' is not recognized as an internal or external command,

c++ - 客户端在关闭后向收到的数据包发送 RST(SHUT_WR)

c++ - 两个线程类共享的 Posix pthread_cond_t 不起作用

C++ - 推送到指向非 POD 的指针的优先级队列导致段错误?

c++ - 标准库 stdio.h 重载函数的第二个 C 链接