串口通信求助

ztczxwzxw 2010-07-20 11:33:50
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<termios.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<string.h>
#define MAXLEN 1024

int main(void)
{
int fd;
struct termios cfg;
char input[MAXLEN];

if(fd=open("/dev/ttyS0",O_RDWR|O_NDELAY|O_NOCTTY)<0)
{
perror("open");
}
if(tcgetattr(fd,&cfg)!=0)
{
perror("getattr");
}
if(fcntl(fd,F_SETFL,0)<0)
{
perror("fcntl");
}
cfg.c_cflag |=CREAD|CLOCAL;
cfmakeraw(&cfg);
cfsetispeed(&cfg,B115200);
cfsetospeed(&cfg,B115200);
cfg.c_cflag &= ~CSIZE;
cfg.c_cflag |= CS8;
cfg.c_cflag |= PARENB;
cfg.c_cflag |= PARODD;
cfg.c_iflag |= INPCK;
cfg.c_cflag &= ~CSTOPB;
tcflush(fd,TCIOFLUSH);
if(tcsetattr(fd,TCSANOW,&cfg)!=0)
{
perror("setattr");
}
do
{
memset(input,'\0',sizeof(input));
printf("input");
if(fgets(input,sizeof(input),stdin)==NULL) //到这里就不行了
{
perror("fgets");
break;
}
write(fd,input,strlen(input));
}while(strncmp(input,"quit",4));
close(fd);
return 0;
}


为什么执行到INPUT后面就卡住了?????。。。。
...全文
107 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ztczxwzxw 2010-07-21
  • 打赏
  • 举报
回复
- -我两个程序原来是同一时间写的。。两个错在同一个地方。。额,我明白了,谢谢大家
brookmill 2010-07-21
  • 打赏
  • 举报
回复
=的优先级很低,比<低,
所以,不加括号的结果就是,先把open的返回值和0比较,比较的结果赋值给fd,如果open成功,fd就会等于0。
如果编译的时候用了-Wall选项,就会有个警告,不用-Wall就没有。
brookmill 2010-07-21
  • 打赏
  • 举报
回复
if((fd=open("/dev/ttyS0",O_RDWR|O_NDELAY|O_NOCTTY))<0)
ztczxwzxw 2010-07-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 elated 的回复:]
fgets 在输入阻塞了,有什么不对么?
等待用户输入,直到一行输入完成
[/Quote]

可是没法输入啊。不知道什么原因
elated 2010-07-20
  • 打赏
  • 举报
回复
fgets 在输入阻塞了,有什么不对么?
等待用户输入,直到一行输入完成

23,117

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧