Ami*_*mar 11 c linux serial-port
我是使用C在Linux中进行串行编程的新手.我已经找到了一小段代码来在串口上写入数据,我在这里分享.运行此代码后,我可能会认为数据已写入特定端口.现在我想打开另一个终端并使用单独的代码想要读取写在该特定端口上的数据 - 我该怎么做?
#include <stdio.h> /* Standard input/output definitions */
#include <string.h> /* String function definitions */
#include <unistd.h> /* UNIX standard function definitions */
#include <fcntl.h> /* File control definitions */
#include <errno.h> /* Error number definitions */
#include <termios.h> /* POSIX terminal control definitions */
/*
* 'open_port()' - Open serial port 1.
*
* Returns the file descriptor on success or -1 on error.
*/
int
open_port(void)
{
int fd; /* File descriptor for the port */
fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1)
{
/* Could not open the port. */
perror("open_port: Unable to open /dev/ttyS0 - ");
}
else
fcntl(fd, F_SETFL, 0);
n = write(fd, "ATZ\r", 4);
if (n < 0)
fputs("write() of 4 bytes failed!\n", stderr);
return (fd);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码将在特定端口上写入数据.
Jon*_*ler 10
理论上,您所要做的就是打开相关的端口进行读取,并使用它read()来获取数据.
int
read_port(void)
{
int fd = open("/dev/ttyS0", O_RDONLY | O_NOCTTY);
if (fd == -1)
{
/* Could not open the port. */
perror("open_port: Unable to open /dev/ttyS0 - ");
}
char buffer[32];
int n = read(fd, buffer, sizeof(buffer));
if (n < 0)
fputs("read failed!\n", stderr);
return (fd);
}
Run Code Online (Sandbox Code Playgroud)
有差异; 值得注意的是,读取需要一个缓冲区来放入数据.显示的代码丢弃了第一个读取的消息.请注意,简短读取只表示可用数据少于读取完成时所请求的数据.它不会自动指示错误.想想命令行; 某些命令可能是一个或两个字符(ls),其他命令可能相当复杂(find /some/where -name '*.pdf' -mtime -3 -print).使用相同缓冲区来读取两者的事实不是问题; 一个read给3个字符(包括换行符),另外47个左右.
发布的程序对端口状态做了很多假设.在现实世界的应用程序中,您应该明确地执行所有重要的设置.我认为在POSIX下学习串口编程的最佳来源是
POSIX操作系统的串行编程指南
我在这里反映它:https://www.cmrr.umn.edu/~strupp/serial.html
| 归档时间: |
|
| 查看次数: |
58553 次 |
| 最近记录: |