0

次のコードを実行していますが、最後まで実行されます。ただし、入力を待機していないようで、バッファから得られる唯一の出力は「\ 377」です。POSIXオペレーティングシステムのシリアルプログラミングガイドを読んで、そこに提供されている提案のいくつかを使用しようとしています.しかし、私の構成の何かがそれを台無しにしている可能性があると思います。任意の考えをいただければ幸いです。

#include <iostream>
using namespace std;
#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 */


int open_port() {
    int fd; //Descriptor for the port
    fd = open("/dev/tty.usbmodemfa141", O_RDWR | O_NOCTTY | O_NDELAY);
    if (fd == -1) {
        cout << "Unable to open port. \n";
}
else {
        cout << "Port opened.\n";
}
cout << "Descriptor in open:";
cout << fd;
cout << "\n";
return fd;
}

int configure_port (int fd) {
struct termios options;

tcgetattr(fd, &options);
cfsetispeed(&options, B9600);
cfsetospeed(&options, B9600);

options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
options.c_cflag |= (CLOCAL | CREAD);
tcsetattr(fd, TCSANOW, &options);

cout << "Port configured.\n";

return (fd);
}

void read_data(int fd) {
cout << "Reading data from: ";
cout << fd;
cout << "\n";

char buffer;
buffer = fcntl(fd, buffer, 0);
cout << "Buffer: ";
cout << buffer;
cout << "\n";
}

int main (int argc, char * const argv[]) {
int fd; //Descriptor for the port

fd = open_port();
configure_port(fd);
cout << "Descriptor: ";
cout << fd;
cout<< "\n";
read_data(fd);
cout << "Data read.";

return 0;
}
4

1 に答える 1

2

シリアルポートから読み取っていません!

OSXのfcntlマニュアルページから:

fcntl-- ファイル制御

このfcntl機能は、ファイル記述子を制御することです。読むには関数が必要ですread

于 2012-10-23T04:41:28.793 に答える