1

我正在编写一个使用libusb 1.0 和 cImg的相机捕捉程序。它连接到我的Atik 314L天文相机并捕获图像以显示在屏幕上。它在以普通用户或超级用户身份编译时编译良好,在以 root 用户身份执行时运行良好,但在以任何其他方式运行时会产生分段错误。

我正在使用Code::Blocksusb_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="camera"
  3. 尝试将程序本身的权限更改为 777。不过,这是最后的努力——我真的没想到它会起作用。

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

4

1 回答 1

1

您可能需要使用类似的函数设置/获取设备的标志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标志。

于 2013-07-15T05:39:30.467 回答