Преобразование дескриптора файла указателя в числовой дескриптор файла без закрытия файла - PullRequest
0 голосов
/ 14 апреля 2019

Я пишу модуль apache, который взаимодействует с последовательным портом. В настоящее время я могу писать и читать с помощью следующего вида кода:

char* dp=mydata; //mydata is declared elsewhere and contains output
apr_file_t* fd;
apr_pool_t* apool;
apr_status_t ps=apr_pool_create_ex(&apool,NULL,NULL,NULL);
apr_file_open(&fd,port,APR_FOPEN_READ | APR_FOPEN_BINARY, APR_OS_DEFAULT, apool);
apr_size_t sz=mydatasz; //mydatasz is equal to # of bytes to output
apr_status_t fsr=apr_file_write(fd,dp,&sz);
apr_status_t fsc=apr_file_close(fd);

Я считаю, что это также работает с последовательным устройством (/ dev / ttyS0). То, что я хочу сделать сейчас, - это возможность установить параметры последовательной передачи в моей программе. Я попытался создать режим необработанного последовательного ввода-вывода на скорости 9600 бит / с без управления потоком со следующим фрагментом:

struct termios tmine;
apr_file_t* fd;
apr_pool_t* apool;
apr_status_t ps=apr_pool_create_ex(&apool,NULL,NULL,NULL);
apr_status_t fs=apr_file_open(&fd,port,APR_FOPEN_WRITE | APR_FOPEN_READ | APR_FOPEN_BINARY, APR_OS_DEFAULT, apool);
cfmakeraw(&tmine);
cfsetispeed(&tmine,B9600);
cfsetospeed(&tmine,B9600);
tmine.c_cflag |= (CLOCAL|CREAD);
tmine.c_cflag &= ~CSTOPB;
tmine.c_cflag &= ~CRTSCTS;
tmine.c_cc[VMIN]=0;c_cc[TIME]=10;
tcsetattr(&fd,TCSANOW,&tmine); //ERROR
apr_status_t fsc=apr_file_close(fd);

Теперь я включил соответствующие заголовки. Но проблемы, которые я получаю:

utils.c:64: warning: passing argument 1 of ‘tcgetattr’ makes
            integer from pointer without a cast               
utils.c:71: error: ‘c_cc’ undeclared (first use in this function)

Я понимаю, что первая проблема возникла потому, что дескриптор файла имеет тип apr_file_t *, но семейство функций termios ожидает целое число, а не тип apr_file_t *.

Есть ли способ, как я могу преобразовать файлы типа apr_file_t * в целочисленный эквивалент, чтобы я мог использовать настройки termios в своей программе? (например, существует ли функция, которую я могу использовать, которая может сделать это для меня?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...