модуль apache останавливается при запуске в браузере в linux, если файл является устройством - PullRequest
0 голосов
/ 05 апреля 2019

В настоящее время я делаю модуль apache для linux, и цель состоит в том, чтобы передавать правильные данные в / из последовательного порта (rs232) на основе пользовательского ввода.

Здесь я попробовал простую программу.

Если я создаю простой пустой файл и предоставляю ему полные права доступа (через chmod 777), и я использую это имя файла вместо / dev / ttyS0 в моем коде, то правильные данные записываются и загружаются изфайл и процесс происходит быстро, как и ожидалось, из моего браузера.

Теперь я попытался изменить это имя файла обратно на / dev / ttyS0, потому что я хочу записывать и читать с последовательного порта.Поскольку этот файл был символической ссылкой на / dev / tts / 0, я изменил разрешения обоих файлов на 777. На этот раз браузер зависает, как будто ничего не происходит.

Затем я использовал stty, чтобы изменить настройки дляпорт, чтобы я мог остановить чтение или запись по истечении времени ожидания.Теперь мои настройки следующие:

bash-3.1# stty -F /dev/ttyS0 -a
speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>;
start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 10;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl -ixon -ixoff -iuclc -ixany -imaxbel
-iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

Это код, который я создал:

<code>#include "httpd.h"
#include "http_config.h"
#include "http_protocol.h"
#include "ap_config.h"

static int ainp(const char* port,char* dat,request_rec *r){
    //make memory pool so file handler has memory to work with
    apr_pool_t* apool; 
    apr_status_t ps=apr_pool_create_ex(&apool,NULL,NULL,NULL);
    //open binary file for reading
    apr_file_t* fd;
    apr_status_t fs=apr_file_open(&fd,port,APR_FOPEN_READ | APR_FOPEN_BINARY, APR_OS_DEFAULT, apool);
    if (fs != APR_SUCCESS){ap_rprintf(r,"cant open %s for write<br>",port);}
    //Read in up to 10 bytes of data
    char* dp=dat;
    apr_size_t sz=10;
    apr_status_t fsr=apr_file_read(fd,dp,&sz);
    //Close file
    apr_status_t fsc=apr_file_close(fd);
    //And strip string output to not receive garbage
    dat[sz]='\0';
}

static int aoutp(const char* port,char* dat,request_rec *r){
    apr_pool_t* apool;
    apr_status_t ps=apr_pool_create_ex(&apool,NULL,NULL,NULL);
    apr_file_t* fd;
    apr_status_t fs=apr_file_open(&fd,port,APR_FOPEN_WRITE | APR_FOPEN_BINARY, APR_OS_DEFAULT, apool);
    if (fs != APR_SUCCESS){ap_rprintf(r,"cant open %s for read<br>",port);}
    char* dp=dat;
    apr_size_t sz=10;
    apr_status_t fsr=apr_file_write(fd,dp,&sz);
    apr_status_t fsc=apr_file_close(fd);
}


static int centralstation_handler(request_rec *r)
{
    char dat[20]; //My data
    if (strcmp(r->handler, "centralstation")){return DECLINED;}
    r->content_type = "text/html";
    if (!r->header_only)
        {
        //Stall starts here
        aoutp("/dev/ttyS0","1234567890ABCDEFGHIJ",r);
        ainp("/dev/ttyS0",dat,r);
        ap_rprintf(r,"Data: <pre>%s
", dat);} return OK;} static void centralstation_register_hooks (apr_pool_t * p) {ap_hook_handler (centralstation_handler, NULL, NULL, APR_HOOK_MIDDLE;NULL, / * создание структур конфигурации на сервер * / NULL, / * объединение структур конфигурации на сервер * / NULL, / * таблица команд файла конфигурации * / centralstation_register_hooks / * перехват регистрации * /};

Что я могу сделать, чтобы удалить эту стойку, все еще пытаясь получить доступ к последовательному порту? Я ожидаю, что функция open вернется немедленно или по крайней мере через 10 секунд? Я использую неправильные функции?

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