第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

請(qǐng)問有人遇到過這樣的錯(cuò)誤嗎?是什么原因???

請(qǐng)問有人遇到過這樣的錯(cuò)誤嗎?是什么原因啊?

PHP
富國滬深 2023-03-19 21:17:18
想從串口中讀取數(shù)據(jù),在調(diào)用tcgetattr(fd,&ttys)時(shí)總是出現(xiàn)"Input/output error"這樣的錯(cuò)誤,不知道為什么。
查看完整描述

1 回答

?
翻翻過去那場(chǎng)雪

TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊

用tcgetattr函數(shù)與tcsetattr函數(shù)控制終端
為了便于通過程序來獲得和修改終端參數(shù),Linux還提供了tcgetattr函數(shù)和tcsetattr函數(shù)。tcgetattr用于獲取終端的相關(guān)參數(shù),而tcsetattr函數(shù)用于設(shè)置終端參數(shù)。

頭文件 <termios.h><unistd.h> 
函數(shù)形式 int tcgetattr(int fd, struct termios *termios_p);int tcsetattr(int fd, int optional_actions, const struct termios *termios_p); 
返回值 成功 失敗 是否設(shè)置errno 
0 ?1 是 

說明:tcgetattr函數(shù)用于獲取與終端相關(guān)的參數(shù)。參數(shù)fd為終端的文件描述符,返回的結(jié)果保存在termios結(jié)構(gòu)體中,該結(jié)構(gòu)體一般包括如下的成員

tcflag_t c_iflag; c_iflag:輸入模式標(biāo)志,控制終端輸入方式 
tcflag_t c_oflag; oflag:輸出模式標(biāo)志,控制終端輸出方式 
tcflag_t c_cflag; c_cflag:控制模式標(biāo)志,指定終端硬件控制信息
tcflag_t c_lflag; c_lflag:本地模式標(biāo)志,控制終端編輯功能
cc_t c_cc[NCCS]; c_cc[NCCS]:控制字符,用于保存終端驅(qū)動(dòng)程序中的特殊字符,如輸入結(jié)束符等

tcsetattr函數(shù)用于設(shè)置終端的相關(guān)參數(shù)。參數(shù)fd為打開的終端文件描述符,參數(shù)optional_actions用于控制修改起作用的時(shí)間,而結(jié)構(gòu)體termios_p中保存了要修改的參數(shù)。
optional_actions可以取如下的值。

TCSANOW:不等數(shù)據(jù)傳輸完畢就立即改變屬性。
TCSADRAIN:等待所有數(shù)據(jù)傳輸結(jié)束才改變屬性。
TCSAFLUSH:清空輸入輸出緩沖區(qū)才改變屬性。錯(cuò)誤信息:
EBADF:非法的文件描述符。
EINTR:tcsetattr函數(shù)調(diào)用被信號(hào)中斷。
EINVAL:參數(shù)optional_actions使用了非法值,或參數(shù)termios中使用了非法值。
ENCTTY:非終端的文件描述符。實(shí)例演練:
程序p6.2.c通過修改終端控制字符,將終端輸入結(jié)束符由“Ctrl+D”,修改成了“Ctrl+G”。首先,程序調(diào)用tcgetattr函數(shù)獲得標(biāo)準(zhǔn)輸入的termios信息,將termios結(jié)構(gòu)體中的c_cc[VEOF]控制字符的修改成0x07(即Ctrl+G);然后,使用tcsetattr函數(shù)將修改后的termios參數(shù)設(shè)置到終端中。具體代碼如下所示:
//p6.2.c 修改終端控制字符示例
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <errno.h>

int main(void){
//term用于存儲(chǔ)獲得的終端參數(shù)信息
struct termios term;
int err;//獲得標(biāo)準(zhǔn)輸入的終端參數(shù),將獲得的信息保存在term變量中
if(tcgetattr(STDIN_FILENO,&term)==-1){
perror("Cannot get standard input description");
return 1;
}//修改獲得的終端信息的結(jié)束控制字符
term.c_cc[VEOF]=(cc_t)0x07;//使用tcsetattr函數(shù)將修改后的終端參數(shù)設(shè)置到標(biāo)準(zhǔn)輸入中
//err用于保存函數(shù)調(diào)用后的結(jié)果
err=tcsetattr(STDIN_FILENO,TCSAFLUSH,&term);//如果err為-1或是出現(xiàn)EINTR錯(cuò)誤(函數(shù)執(zhí)行被信號(hào)中斷),
//給出相關(guān)出錯(cuò)信息
if(err==-1 && err==EINTR){
perror("Failed to change EOF character");
return 1;
}return 0;
}
使用gcc編譯p6.2.c程序,得到名為p6.2的可執(zhí)行程序。在執(zhí)行p6.2程序前,按“Ctrl+D”可以使終端結(jié)束。執(zhí)行p6.2程序后,按“Ctrl+D”失去了作用,而輸入“Ctrl+G”實(shí)現(xiàn)了原來“Ctrl+D”的功能。


查看完整回答
反對(duì) 回復(fù) 2023-03-22
  • 1 回答
  • 0 關(guān)注
  • 237 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)