C Linux ioctl TCGETS 和 TCSETS errno 25

Posted

技术标签:

【中文标题】C Linux ioctl TCGETS 和 TCSETS errno 25【英文标题】:C Linux ioctl TCGETS and TCSETS errno 25 【发布时间】:2014-09-19 04:36:44 【问题描述】:

对于作业,我需要使用 ioctl、TCGETS 和 TCSETS。我不能使用 tcgetattr 和 tcsetattr。

到目前为止,这是我的代码:

    struct termios term;
    int openLocation
    int ioResult
    openLocation = open("../../dev/fb0",O_RDWR);
    ioResult = ioctl(openLocation,TCGETS,&term);

这让我 errno 25。我不太确定问题出在哪里。我最终需要通过取消设置 ICANON 位并禁用 ECHO 来禁用规范模式,并且我需要再次使用 ioctl。谢谢你们的帮助

【问题讨论】:

可能应该确保打开成功 打开绝对有效 【参考方案1】:

/dev/fb0 是帧缓冲设备,而不是终端。你不能在上面使用TCGETS

你的意思是/dev/tty0吗?

【讨论】:

有趣...好吧,我肯定必须将 fb0 用于一些视觉效果,但我想这不是我必须用来禁用按键回声...没有任何提及分配中的 fb0 以外的文件,但也许 tty0 是我需要使用的...我会试一试,但是考虑到我正在尝试禁用按键回声,这是否有意义? 【参考方案2】:

添加 perror 或 strerror 可能会帮助您看到(如@kch 所述)您的打开调用失败并且正在对无效文件 (ENOTTY) 调用 ioctl。

【讨论】:

以上是关于C Linux ioctl TCGETS 和 TCSETS errno 25的主要内容,如果未能解决你的问题,请参考以下文章

linux C语言 ioctl()函数(修改socket_fd状态:阻塞或非阻塞)

linux device driver —— ioctl

(二十)linux中i2c的ioctl,write,read函数的使用

linux c的四种定时方式(sleep/usleep/select/ioctl)

Linux C下非特定波特率的配置和使用

(Linux风格)ioctl代码,难懂