文件I/O編程之: 實(shí)驗(yàn)內(nèi)容
(2)編寫代碼。
編寫宿主機(jī)和目標(biāo)板上的代碼,在這些程序中用到的open_port()和set_com_config()函數(shù)請參照6.4節(jié)。這里只列出宿主機(jī)上的代碼。
/*com_host.c*/
#includestdio.h>
#includestdlib.h>
#includeunistd.h>
#includestring.h>
#includefcntl.h>
#includesys/types.h>
#includesys/stat.h>
#includeerrno.h>
#includeuart_api.h
intmain(void)
{
intfds[SEL_FILE_NUM],recv_fd,maxfd;
charbuff[BUFFER_SIZE];
fd_setinset,tmp_inset;
structtimevaltv;
unsignedloop=1;
intres,real_read,i;
/*將從串口讀取的數(shù)據(jù)寫入這個文件中*/
if((recv_fd=open(RECV_FILE_NAME,O_CREAT|O_WRONLY,0644))0)
{
perror(open);
return1;
}
fds[0]=STDIN_FILENO;/*標(biāo)準(zhǔn)輸入*/
if((fds[1]=open_port(HOST_COM_PORT))0)/*打開串口*/
{
perror(open_port);
return1;
}
if(set_com_config(fds[1],115200,8,'N',1)0)/*配置串口*/
{
perror(set_com_config);
return1;
}
FD_ZERO(inset);
FD_SET(fds[0],inset);
FD_SET(fds[1],inset);
maxfd=(fds[0]>fds[1])?fds[0]:fds[1];
tv.tv_sec=TIME_DELAY;
tv.tv_usec=0;
printf(Inputsomewords(enter'quit'toexit):n);
while(loop(FD_ISSET(fds[0],inset)||FD_ISSET(fds[1],inset)))
{
tmp_inset=inset;
res=select(maxfd+1,tmp_inset,NULL,NULL,tv);
switch(res)
{
case-1:
{
perror(select);
loop=0;
}
break;
case0:/*Timeout*/
{
perror(selecttimeout);
loop=0;
}
break;
default:
{
for(i=0;iSEL_FILE_NUM;i++)
{
if(FD_ISSET(fds[i],tmp_inset))
{
memset(buff,0,BUFFER_SIZE);
/*讀取標(biāo)準(zhǔn)輸入或者串口設(shè)備文件*/
real_read=read(fds[i],buff,BUFFER_SIZE);
if((real_read0)(errno!=EAGAIN))
{
loop=0;
}
elseif(!real_read)
{
close(fds[i]);
FD_CLR(fds[i],inset);
}
else
{
buff[real_read]=' 主站蜘蛛池模板: 古交市| 中方县| 方城县| 彰武县| 阿鲁科尔沁旗| 太原市| 弥勒县| 临海市| 靖远县| 横峰县| 广南县| 阿拉善左旗| 黑水县| 扎赉特旗| 桐柏县| 通道| 新宾| 定州市| 阿城市| 宿松县| 东港市| 休宁县| 固安县| 门源| 嘉义县| 垫江县| 南宁市| 龙江县| 班玛县| 四会市| 清河县| 兴安县| 吉林省| 鄯善县| 于都县| 四会市| 文山县| 容城县| 乌拉特中旗| 环江| 乌海市|