我正在做一個程序來打開,寫入和讀取端口ttyUSB0,我有下一個程序,我什麼都不寫。任何人都可以幫我嗎?打開,寫入和讀取ttyUSB0
我的問題是,我有寫或讀功能的問題,因爲我不能讀寫ttyUSB0端口,我搜索解決方案來寫和讀ttyUSB0端口。
#include <sys/time.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <termios.h>
#include <iostream>
#include <sys/types.h>
#include <sys/stat.h>
using namespace std;
int serial_open(char *serial_name, speed_t baud)
{
struct termios newtermios;
int fd;
fd = open(serial_name,O_RDWR | O_NOCTTY);
newtermios.c_cflag= CBAUD | CS8 | CLOCAL | CREAD;
newtermios.c_iflag=IGNPAR;
newtermios.c_oflag=0;
newtermios.c_lflag=0;
newtermios.c_cc[VMIN]=1;
newtermios.c_cc[VTIME]=0;
cfsetospeed(&newtermios,baud);
cfsetispeed(&newtermios,baud);
if (tcflush(fd,TCIFLUSH)==-1) return -1;
if (tcflush(fd,TCOFLUSH)==-1) return -1;
if (tcsetattr(fd,TCSANOW,&newtermios)==-1) return -1;
return fd;
}
void serial_send(int serial_fd, char *data, int size)
{
write(serial_fd, data, size);
}
int serial_read(int serial_fd, char *data, int size, int timeout_usec)
{
fd_set fds;
struct timeval timeout;
int count=0;
int ret;
int n;
do {
FD_ZERO(&fds);
FD_SET (serial_fd, &fds);
timeout.tv_sec = 0;
timeout.tv_usec = timeout_usec;
ret=select (FD_SETSIZE,&fds, NULL, NULL,&timeout);
if (ret==1) {
n=read (serial_fd, &data[count], size-count);
count+=n;
data[count]=0;
}
} while (count<size && ret==1);
return count;
}
void serial_close(int fd)
{
close(fd);
}
int main(int argc, char *argv[])
{
int serial_fd, n, longitud,;
char *device=」at」;
char *data;
longitud=strlen(device);
serial_fd = serial_open("/dev/ttyUSB0",B38400);
if (serial_fd == -1) {
printf ("Error opening the serial device: %s\n",argv[1]);
perror("OPEN");
exit(0);
}
printf("SERIAL OPEN:%s\n", device);
serial_send(serial_fd, device, longitud);
printf ("String sent------> %s\n",device);
n=serial_read(serial_fd,data,longitud,10000);
printf("Se ha recibido %s \n Tamaño: %d\n n:%d \n serial_fd:%d\n",data, longitud,n,serial_fd);
puts(data);
serial_close(serial_fd);
// cout << "Hello world!" << endl;
return 0;
}
執行['read'(http://man7.org/linux/man-pages/man2/read.2.html)或['寫'](http://man7.org/linux/man-pages/man2/write.2.html)系統調用返回一個錯誤代碼?你有沒有檢查錯誤是什麼?總是檢查錯誤,並*錯誤是什麼(通過檢查['errno']完成(http://man7.org/linux/man-pages/man3/errno.3.html),使用[ 'perror'](http://man7.org/linux/man-pages/man3/perror.3.html)或者使用['strerror']獲取一個字符串(http://man7.org/linux/man-頁/ man3/strerror.3.html))。 –
隨着開放我返回一個'3',與寫我不會返回任何東西,並閱讀我返回一個'0',這'0'是我沒有收到任何東西 – Igor
當'read'返回零時,它意味着「連接」已關閉,或已達到「文件結束」。你真的需要檢查'寫'返回。並且所有其他系統調用(以及* do *記得在系統調用返回失敗時檢查'errno'(例如'-1'))。 –