免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 9939 | 回复: 4
打印 上一主题 下一主题

求救:Error: Bad File Descriptor [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-11 10:35 |只看该作者 |倒序浏览
if(write(fd,&data,2)<0)
                {   printf("fd is %dn",fd);
                        printf("i2c: watchdog write error.n");
                printf("Error :%sn",strerror(errno));
                close(fd);
                exit(-1);
                }

咝绣e誤打印信息為


fd is 3

i2c: watchdog write error

Error: Bad File Descriptor

在這段程序之前有ioctl設置,read等 都沒有出錯 到了write錯了,怎麽解決啊?

论坛徽章:
0
2 [报告]
发表于 2005-11-11 11:01 |只看该作者
发的全一点。这里没有错误的原因,文件描述符错误!看看你的ioctl和read

论坛徽章:
0
3 [报告]
发表于 2005-11-11 11:37 |只看该作者
謝謝 程序太長了我先自己看看

论坛徽章:
0
4 [报告]
发表于 2005-11-11 11:42 |只看该作者
int main(int argc, char *argv[])
{
       
        unsigned char I2C_WrAddr = EX_GPIO_WRITE_ADDR;
        unsigned char I2C_RdAddr = EX_GPIO_READ_ADDR;
        unsigned long Delay = EX_GPIO_DELAY;
        unsigned char data[2];
        unsigned long Bit;       
        unsigned long enable;
        int fd=-1;
        unsigned int Data1;
        char device[10];
        unsigned long tp=0;
       
        snprintf(device, 10, "%d", EM86XX_CHIP_NUMBER);
       
if((fd=open("/dev/i2c",O_RDONLY))<0)
                {
                printf("EX_GPIO:  open device error.n");
                exit(-1);
       
              }
else{
        printf("fd is %d n",fd);
        if(ioctl(fd,I2C_SUB,&tp)<0)   // sub address
                {
             printf("EX_GPIO:  (sub/nosub)ioctl error.n");
              close(fd);
               exit(-1);
              }
        if(ioctl(fd,I2C_SOFT,&tp)<0)   // soft  hardware
                {
             printf("EX_GPIO:  ioctl (soft/hw) error.n");
              close(fd);
               exit(-1);
              }
          if(ioctl(fd,I2C_ADDRWR,&I2C_WrAddr)<0)   // WR_ADDR
                {
             printf("EX_GPIO:  ioctl (ADDRWR) error.n");
              close(fd);
               exit(-1);
              }
             
         if(ioctl(fd,I2C_ADDRRD,&I2C_RdAddr)<0)   // RD_ADDR
                {
             printf("EX_GPIO:  ioctl (ADDRD) error.n");
              close(fd);
               exit(-1);
              }
        if(ioctl(fd,I2C_SETDELAY,&Delay)<0) //time Delay
                {
             printf("EX_GPIO:  ioctl (Delay us) error.n");
              close(fd);
               exit(-1);
              }
        }
       
       Bit = atoi(argv[1]);   
          
        //I2C_Read_NoSubAddr(&I2C,data,2);
/*****************************************************/  
    if(lseek(fd,I2C_RdAddr,SEEK_SET)<0)
                {
                 printf("EX_GPIO:   lseek read error.n");
                 close(fd);
                exit(-1);
                  }
        if(read(fd,&data,2)<0)
                {
                       printf("EX_GPIO:  read error.n");
                       close(fd);
                exit(-1);
                }

/*****************************************************/
       
        Data1 = (unsigned int)(data[0]) + (((unsigned int)(data[1])) << 8);
       
        if(Bit > 7)
                Bit -= 2;

        enable = atoi(argv[2]);
    if(enable)
    {
        Data1 |= (1 << (Bit));
    }
    else
    {
        Data1 &= (~(((1 << (Bit)))));
    }
       
        data[0] = Data1 & 0x00FF;
        data[1] = (Data1 >> 8) & 0x00FF;       
       
        //I2C_Write_NoSubAddr(&I2C,data,2);
/*****************************************************/
       
        if(lseek(fd,I2C_WrAddr,SEEK_SET)<0)
                {
                 printf("EX_GPIO:  lseek write error.n");
                 close(fd);
                exit(-1);

              }
             

      if(write(fd,&data,2)<0)
                {   printf("fd is %dn",fd);
                        printf("EX_GPIO: write error.n");
                printf("EX_GPIO :%sn",strerror(errno));
                close(fd);
                exit(-1);
                }

/*****************************************************/       
        close(fd);
             fprintf(stderr, "set expander GPIO %ld %sn", Bit, (enable? "high": "low"));
        return 0;
}

文中有乱码,我已替你禁用 Smiles
            platinum


[ 本帖最后由 platinum 于 2005-11-11 11:52 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2005-11-14 08:28 |只看该作者
剛剛開始的只讀RDONLY打開改作讀寫RWR打開即可
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP