我正在编写一个使用 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 环境中编程还比较陌生,我不确定如何才能让普通用户运行它。以下是我到目前为止尝试过的步骤:
- 将我的用户添加到所有用户组以查看是否是组权限问题(哎呀——我什至尝试将自己添加到“root”,但它没有做任何事情)
- 向
/etc/udev/rules.d
添加一条规则,内容有点像这样:PROGRAM="/home/[username]/git/camera/prog", MODE="0660", GROUP="相机" - 尝试将程序本身的权限更改为 777。不过那是最后的努力——我真的没想到它会起作用。
我正在学习如何调试,所以如果您需要日志或任何东西来查看问题所在,请告诉我。
最佳答案
您可能需要使用类似fnctl()
的函数来设置/获取设备的标志,并且根据您的要求,您可以设置文件访问模式(O_RDONLY/O_WRONLY/O_RDWR
) 和文件创建标志 (O_CREAT/O_EXCL/O_NOCTTY/O_TRUNC
)。但是,在 Linux 上,此命令只能更改 O_APPEND、O_ASYNC、O_DIRECT、O_NOATIME
和 O_NONBLOCK
标志。
关于c++ - 以用户身份而非 sudo 身份运行时 libusb 1.0 程序中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17240061/