打开串口函数:open()函数

这是文件I/O的常用函数:open()函数,open()函数用来打开一个设备,返回值为一个整型变量,如果这个值== -1,说明打开文件失败,如果为大于0的值,这个值代表的就是文件描述符。一般的写法为:

if((fd==open("/dev/ttyUSB0",O_RDWR|O_NOCTTY|O_NDELAY)<0)
{
  perror("open failed!");//用标准出错流说明文件打开失败
}

这个事常用的一种用法就是fd为设备描述符,linux在操作硬件设备时,屏蔽了硬件的基本细节,只把硬件当做文件来进行操作,所有的操作都是以open()函数来开始的,它用来获取fd,然后后期的其他操作全部控制fd来完成对硬件设备的实际操作。你要打开的/dev/ttyS0,代表的为串口1,也就是常说的com1,后面跟的是一些控制字。

int open(const char *pathname,int oflag,.../*,mode_t mode */);

这个就是open()函数的公式,控制字可以有多种,

O_RDONLY:只读打开;

O_WRONLY:只读打开;

O_RDWR:读写打开;

O_APPEND:每次打开时都加到文件的尾端

O_CREAT:若此文件不存在则创建该文件。使用此选项时,需要同时说明第3个参数mode,用其来说明该新文件的存取许可权位。

O_EXCL:如果同时指定了O_CREAT,而文件已经存在,则出错。这可以测试一个文件是否存在,如果不存在则创建此文件成为一个原子操作。

O_TRUNC:如果此文件存在,而且为只读或只写成功打开,则将其长度截断为0。

O_NOCTTY:如果pathname指的是终端设备,则不将此设备分配作为此进程的控制终端。

O_NONBLOCK:如果pathname指的是一个FIFO、一个块特殊文件或一个字符特殊文件,则此选择项为此文件的本次打开操作和后续的I/O操作设置非堵塞方式。

O_SYNC:使每次write都等到物理i/o操作完成。

这些控制字都是通过“或”符号分开(|)

当调用系统调用open()函数时,操作系统会将文件系统对应设备的inode中的file_operations安装进用户进程的task_struct中的file_struct,然后再调用具体文件的file_operations中的open()函数,其他的read、write等等也是如此,所以实际上open()函数操作上是一个连接过程,我个人认为称其为open容易误导。至于file_operations中的针对底层硬件的操作,简单地说实际上就是对具体硬件接口地控制/状态寄存器和数据寄存器的读写,入硬盘,这种硬盘有其自己的控制器,说以它自己内部会定期处理寄存器的命令和数据,完成相应的操作请求,请求完成后CPUg发中断。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值