Добавляем соль или любые другие приправы в воду? Отличный, развернутый ответ! Желаю побольше "стек/приоритет" вопросы получили ответы, которые выломали играть во все приоритетные задания и пройти! "Профиль Ас" сменила название на "Жеская Спутник"..... так что... Макбук: "спутниковые профиль" и бросил на iPhone через AirPlay. Он работает не работает в обоих случаях. ;) Я, вероятно, должен был указан точный голос, что я был после, на мой вопрос, А я не проверил, чтобы увидеть, если остальные были доступны как система голоса, но это англичане (мужчина) один (единственный мужчина британский голоса доступны система голоса Даниэля и Оливер, оба из которых, кажется, значительно более низкого качества).

Я делал некоторые работы с Старый с svr4 коробка с серийным I/O, когда я обнаружил, что драйвер на адаптер не поддерживает TIOCMGET через функции ioctl вызов (например, вызов ioctl(FD, то TIOCMGET, &арг);). Имея источник для водитель, и, глядя на это, кажется, не слишком трудно добавить ответ на звонок. Однако, я столкнулся с немного корягу в том, что я делаю, кажется, не работает. Взглянув на водителя, он имеет следующий код для TCGETS услуги:

дело TCGETS:
{ /* немедленное получение Парм */
 зарегистрировать структуру struct termios *ЦБ;

 если (Мп->b_cont) /* плохой пользовательский параметр */
freemsg(Мп->b_cont);

 если (!(вр1 = allocb(оператор sizeof(структура termios), BPRI_MED)))
{
 putbq(м, Мп);
 bufcall(оператор sizeof(структура termios), BPRI_MED, getoblk, (долго)ТП);
возврат;
}
 Мп->b_cont = вр1;
 КБ = (структуры struct termios *)Мп->b_cont->b_rptr;

 КБ->c_iflag = ТП->t_iflag;
 КБ->c_oflag = ТП->t_oflag;
 КБ->c_cflag = ТП->t_cflag;

 Мп->b_cont->b_wptr += оператор sizeof(структура termios);
 Мп->b_datap->параметре = M_IOCACK;
 iocbp->ioc_count = оператор sizeof(структура termios);
 putnext(РД(м), Мп);
перерыв;
}

Моя мысль заключалась в том, чтобы просто скопировать этот код и вместо того, чтобы вернуть структуру termios, просто вернуть инт. Как таковой, мой код похож:

дело TIOCMGET:
{ /* немедленное получение Парм */
 зарегистрировать инт *ЦБ;

 если (Мп->b_cont) /* плохой пользовательский параметр */
freemsg(Мп->b_cont);

 если (!(вр1 = allocb(оператор sizeof(тип int), BPRI_MED)))
{
 putbq(м, Мп);
 bufcall(оператор sizeof(тип int), BPRI_MED, getoblk, (долго)ТП);
возврат;
}
 Мп->b_cont = вр1;
 КБ = (инт *)Мп->b_cont->b_rptr;

 /* моя оригинальная попытка получить некоторые биты */
 *КБ = (КЖ->перевозчик * TIOCM_CAR | КЖ->РЦ * TIOCM_RTS | (КЖ->ЛП->Команда & 1) * TIOCM_DTR)


 /* Пробовал это для отладки: 
 *КБ = 0;
 Не похоже, чтобы изменить переменную я прохожу в */


 /* Пробовал это, компилируется нормально, 
 *(инт *)Мп->b_cont->b_rptr = 0;
 но я получаю неправильный аргумент, передаваемый ошибки во время выполнения */

 qreply(м, Мп);

 Мп->b_cont->b_wptr += оператор sizeof(тип int);
 Мп->b_datap->параметре = M_IOCACK;
 iocbp->ioc_count = оператор sizeof(тип int);
 putnext(РД(м), Мп);
перерыв;
}

Делая вызов, как показано ранее, в ioctl(FD, то TIOCMGET, &арг), значение ARG, кажется, не изменилось. Я пробовал пару разных попыток возвращают значение 0 в случае, если проблема была в моем разрядный код назначения. Однако, у меня не было никаких удачи.

Я написал программу, чтобы убедиться, что TCGETS работает как надо - и он делает. Так что я не уверен, куда я иду неправильно - наверное, что-то невероятно глупое и прямо передо мной. Надеюсь, что это с svr4 и потоки не так уж и тайная, чтобы поставить ответ вне досягаемости.

Спасибо всем, кто смотрит и попытаться помочь.

Мак