新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 文件I/O编程之: 实验内容

文件I/O编程之: 实验内容

作者:时间:2013-09-13来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/257134.htm

(2)编写代码。

编写宿主机和目标板上的代码,在这些程序中用到的open_port()和set_com_config()函数请参照6.4节。这里只列出宿主机上的代码。

/*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;

/*将从串口读取的数据写入这个文件中*/

if((recv_fd=open(RECV_FILE_NAME,O_CREAT|O_WRONLY,0644))0)

{

perror(open);

return1;

}

fds[0]=STDIN_FILENO;/*标准输入*/

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);

/*读取标准输入或者串口设备文件*/

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]='';

if(i==0)

{/*将从终端读取的数据写入串口*/

write(fds[1],buff,strlen(buff));

printf(Inputsomewords

(enter'quit'toexit):n);

}

elseif(i==1)

{/*将从串口读取的数据写入普通文件中*/

write(recv_fd,buff,real_read);

}

if(strncmp(buff,quit,4)==0)

{/*如果读取为‘quit’则退出*/

loop=0;

}

}

}/*endofifFD_ISSET*/

}/*fori*/

}

}/*endofswitch*/

}/*endofwhile*/

close(recv_fd);

return0;

}

(3)接下来,将目标板的串口程序交叉编译,再将宿主机的串口程序在PC机上编译。

(4)连接PC的串口1和开发板的串口2。然后将目标板串口程序下载到开发板上,分别在两台机器上运行串口程序。

4.实验结果

宿主机上的运行结果如下所示:

$./com_host

Inputsomewords(enter'quit'toexit):

Hello,Target!

Inputsomewords(enter'quit'toexit):

Imhostprogram!

Inputsomewords(enter'quit'toexit):

Byebye!

Inputsomewords(enter'quit'toexit):

quit/*这个输入使双方的程序都结束*/

从串口读取的数据(即目标板中发送过来的数据)写入同目录下的recv.dat文件中。

$catrecv.dat

Hello,Host!

Imtargetprogram!

Byebye!

目标板上的运行结果如下所示:

$./com_target

Inputsomewords(enter'quit'toexit):

Hello,Host!

Inputsomewords(enter'quit'toexit):

Imtargetprogram!

Inputsomewords(enter'quit'toexit):

Byebye!

与宿主机上的代码相同,从串口读取的数据(即目标板中发送过来的数据)写入同目录下的recv.dat文件中。

$catrecv.dat

Hello,Target!

Imhostprogram!

Byebye!

Quit

请读者用poll()函数实现具有以上功能的代码。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

上一页 1 2 3 4 下一页

关键词: I/O编程 Linux FIFO通信

评论


相关推荐

技术专区

关闭