termios程序范例

本文档提供了一系列使用termios库进行序列埠通信的C语言程序示例,包括标准输入程序、非标准输入程序、非同步输入和等待多个信号源输入。示例详细展示了如何设置波特率、输入模式和终端属性,帮助开发者理解并实现自定义的序列埠应用程序。
摘要由CSDN通过智能技术生成
所有的范例来源自 miniterm.c. The type ahead 暂存器被限制在 255 个字元, 就跟标准输入程序的最大字串长度相同 (<linux/limits.h> 或 <posix1_lim.h>).

参考程序码中的注解它会解释不同输入模式的使用. 我希望这些程序码都能被了解. 标准输入程序的程序范例的注解写得最好, 其它的范例都只在不同于其它范例的地方做注解.

叙述不是很完整, 但可以激励你对这范例做实验, 以延生出合于你所需应用程序的最佳解.

别忘记要把序列埠的权限设定正确 (也就是: chmod a+rw /dev/ttyS1)!

3.1 标准输入程序

 #include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>

/* 鲍率设定被定义在 <asm/termbits.h>, 这在 <termios.h> 被引入 */
#define BAUDRATE B38400            
/* 定义正确的序列埠 */
#define MODEMDEVICE "/dev/ttyS1"
#define _POSIX_SOURCE 1 /* POSIX 系统兼容 */

#define FALSE 0
#define TRUE 1

volatile int STOP=FALSE; 

main()
{
  int fd,c, res;
  struct termios oldtio,newtio;
  char buf[255];
/* 
  开启数据机装置以读取并写入而不以控制 tty 的模式
  因为我们不想程序在送出 CTRL-C 后就被杀掉.
*/
 fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY ); 
 if (fd <0) {perror(MODEMDEVICE); exit(-1); }

 tcgetattr(fd,&oldtio); /* 储存目前的序列埠设定 */
 bzero(&newtio, sizeof(newtio)); /* 清除结构体以放入新的序列埠设定值 */

/* 
  BAUDRATE: 设定 bps 的速度. 你也可以用 cfsetispeed 及 cfsetospeed 来设定.
  CRTSCTS : 输出资料的硬件流量控制 (只能在具完整线路的缆线下工作
            参考 Serial-HOWTO 第七节)
  CS8     : 8n1 (8 位元, 不做同位元检查,1 个终止位元)
  CLOCAL  : 本地连线, 不具数据机控制功能
  CREAD   : 致能接收字元
*/
 newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
 
/*
  IGNPAR  : 忽略经同位元检查后, 错误的位元组
  ICRNL   : 比 CR 对应成 NL (否则当输入信号有 CR 时不会终止输入)
            在不然把装置设定成 raw 模式(没有其它的输入处理)
*/
 newtio.c_iflag = IGNPAR | ICRNL;
 
/*
 Raw 模式输出.
*/
 newtio.c_oflag = 0;
 
/*
  ICANON  : 致能标准输入, 使所有回应机能停用, 并不送出信号以叫用程序
*/
 newtio.c_lflag = ICANON;
 
/* 
  初始化所有的控制特性
  预设值可以在 /usr/include/termios.h 找到, 在注解中也有,
  但我们在这不需要看它们
*/
 newtio.c_cc[VINTR]    = 0;     /* Ctrl-c */ 
 newtio.c_cc[VQUIT]  
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值