Linux下串口编制【转】 (3)

l          O_CREATE:如果文件不存在则产生该文件,使用该标志需要设置访问权限位mode_t

l          O_EXCL:指定该标志,并且指定了O_CREATE标志,如果打开的文件存在则会产生一个错误

l          O_TRUNC:如果文件存在并且成功以写或者只写方式打开,则清除文件所有内容,使得文件长度变为0

l          O_NOCTTY:如果打开的是一个终端设备,这个程序不会成为对应这个端口的控制终端,如果没有该标志,任何一个输入,例如键盘中止信号等,都将影响进程。

l          O_NONBLOCK:该标志与早期使用的O_NDELAY标志作用差不多。程序不关心DCD信号线的状态,如果指定该标志,进程将一直在休眠状态,直到DCD信号线为0。

函数返回值:

成功返回文件描述符,如果失败返回-1

例如假定以可读写方式打开/dev/ttyS0设备,就可以这样操作:

#include<stdio.h>    //头文件包含

......

......

int fd; /* 文件描述符 */

fd = open("/dev/ttyS0", O_RDWR | 0_NOCTTY);  /*以读写方式打开设备*/

if(fd == -1)

perror("Can not open Serial_Port 1/n!");/*打开失败时的错误提示*/

........

........

 

5.      串口读操作(接收端)

open函数打开设备文件,函数返回一个文件描述符(file descriptors,fd),通过文件描述符来访问文件。读串口操作是通过read函数来完成的。函数原型如下:

int read(int fd, *buffer,length);

参数说明:

1).int fd:文件描述符

2).*buffer:数据缓冲区

3).length:要读取的字节数

函数返回值:

读操作成功读取返回读取的字节数,失败则返回-1。

6.      串口写操作(发送端)

写串口操作是通过write函数来完成的。函数原型如下:

write(int fd, *buffer,length);

参数说明:

1).fd:文件描述符

2).*buffer:存储写入数据的数据缓冲区

3).length:写入缓冲去的数据字节数

函数返回值:

成功返回写入数据的字节数,该值通常等于length,如果写入失败返回-1。

例如:向终端设备发送初始化命令

#include<stdio.h>    //头文件包含

......

......

 

int n

sbuf[]={Hello,this is a Serial_Port test!/n };//待发送数据

int len_send="sizeof"(sbuf);//发送缓冲区字节数定义

n = write(fd,sbuf,len_send); //写缓冲区

if(n == -1)

{

printf("Wirte sbuf error./n");

}

......

......

7.      关闭串口

对设备文件的操作与对普通文件的操作一样,打开操作之后还需要关闭,关闭串口用函数close( )来操作,函数原型为:

int close(int fd);

参数说明:

fd:文件描述符

函数返回值:

成功返回0,失败返回-1。


NAME

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzzyjz.html