Qt中ioctl()调用失败

lixiaoming90 2012-06-14 04:57:11
自己写的motor_drv.c驱动,在用c写的测试程序中ioctl()调用成功,并且控制正常,于是用Qt开发应用程序,在初始化的时候调用::ioctl(),但是返回-1,失败了,难道qt中调用::ioctl()函数和在int main()程序中不一样吗?
这是motor_cmd.h

#ifndef _MOTOR_CMD_H
#define _MOTOR_CMD_H

#include <linux/ioctl.h>

#define MOTOR_MAGIC 'x' //define magic
#define MOTOR_MAX_NR 8 //define the maxim number

#define MOTOR_FORWARD _IO(MOTOR_MAGIC, 1)
#define MOTOR_BACK _IO(MOTOR_MAGIC, 2)
#define MOTOR_BRAKE _IO(MOTOR_MAGIC, 3)
#define MOTOR_ORIGIN_LEFT _IO(MOTOR_MAGIC, 4)
#define MOTOR_ORIGIN_RIGHT _IO(MOTOR_MAGIC, 5)
#define MOTOR_TURN_LEFT _IO(MOTOR_MAGIC, 6)
#define MOTOR_TURN_RIGHT _IO(MOTOR_MAGIC, 7)
#define MOTOR_STOP _IO(MOTOR_MAGIC, 8)

#endif /*_MOTOR_CMD_H*/

这是test.c(测试程序)
#include <stdio.h>
#include<string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <netinet/in.h>

#include "motor_cmd.h"
int main(void)
{
int fd_pwm;
int fd_dirc;
int ret;
fd_dirc = open("/dev/motor", O_RDWR);
fd_pwm = open("/dev/motor_pwm", O_RDWR);
if((fd_dirc < 0) && (fd_pwm < 0))
{
printf("Open /dev/motor error\n");
return -1;
}
ret = ioctl(fd_pwm, 0, 300);
printf("ret=%d\n", ret);
ret = ioctl(fd_dirc, MOTOR_FORWARD);
printf("ret=%d", ret);
close(fd_dirc);
close(fd_pwm);
}
以上运行正常,都返回0.而我在Qt中开发的时候,在构造函数里初始化
if(::ioctl(fd_pwm, 0, 300)){
printf("ioctl pwm failed\n");
return ;
}
设备节点打开正常,但一到::ioctl()就错误了,返回的值为-1,可在test.c中是调用正确的啊?
有没有遇到同样问题的,指点一二。

小弟不才,请教一下大家。
...全文
896 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lixiaoming90 2012-06-15
  • 打赏
  • 举报
回复
自己解决了,自己预定义设备节点错误了,谢谢了
zhu_xz 2012-06-14
  • 打赏
  • 举报
回复
错误代码是啥?是不是没有权限?
jinjianxinxh 2012-06-14
  • 打赏
  • 举报
回复
加上extern “C” 关键字试试
wshn13 2012-06-14
  • 打赏
  • 举报
回复
::去掉试试

16,240

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧