当前位置: 代码迷 >> 驱动开发 >> 为什么小弟我应用程序调用write函数老是返回-1
  详细解决方案

为什么小弟我应用程序调用write函数老是返回-1

热度:42   发布时间:2016-04-28 10:29:41.0
为什么我应用程序调用write函数老是返回-1?
这是一段应用程序代码,我测试过open 和ioctl函数都能正常测试  但是write函数总是返回-1,用printk在驱动的write函数里面也证明根本就没找到该驱动的write函数。
#include <unistd.h>
#include <sys/ioctl.h>
#include <stdio.h>
#include <stdlib.h>
#define LED_ON 1
#define LED_OFF 0
static int fd;  //用于存放打开设备时返回的文件句柄

int main(int argc, char **argv)
{
int led_no = 0;
int val ;
int ret;
fd = open("/dev/GPIO_DRV", 0);  //打开设备
if(fd < 0)
  {
   perror("open device failed");
   exit(1);
  } 
  
while(1)
  {
   for(led_no = 0; led_no < 4; led_no++)
    {
     ioctl(fd, LED_ON, led_no);  //点亮一盏灯
     sleep(2);
    }
   led_no = 0;
   for(led_no = 0; led_no < 4; led_no++)
    {
     ioctl(fd, LED_OFF, led_no);  //点亮一盏灯
     sleep(1);
    }
   led_no = 0;
   if(argc != 2)
    {
     printf("Usage :\n");
     printf("%s <on|off>\n", argv[0]);
     return 0;   //退出重新运行应用程序
    }
   
   if (strcmp(argv[1], "go") != 0)  //如果第二个参数不是go
   {
    if (strcmp(argv[1], "on") == 0)  //如果第二个参数为on
    {
     printf("led app on\n");
     val  = 1;
    }
    else if (strcmp(argv[1], "off") == 0) //第二个参数为off
    {
     printf("led app off\n");
     val = 0;
    }
     ret = write(fd, &val, 4);
    if(ret < 0)
     {
       printf("write failed ret = %d\n", ret);
       return 1;
     }
    return 0;
   }

   
  }
//close(fd); //关闭设备
return 0;
}

printf("write failed ret = %d\n", ret);
到这句就打印出 ret = -1

------解决方案--------------------
驱动呢?write函数没匹配上,那就是驱动问题了。
------解决方案--------------------
驱动呢?write函数没匹配上,那就是驱动问题了。
  相关解决方案