Программа Make C для интерактивного режима - PullRequest
0 голосов
/ 27 января 2012

Здесь у меня есть одна команда, которая похожа на интерактивный режим:

obex_test -b $BD_ADDR $CH_NUM

Эта команда из сценария, но я хочу выполнить эту команду через системный вызов в программе на Си.obex_test - не что иное, как библиотека передачи файлов obex.Здесь я хочу получить файл с удаленного устройства на локальное устройство через Bluetooth.Это страница руководства obex_test

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

Я использовал popen(command,"r"), но это бесполезно;он не принимает входные данные от пользователя.Если бы я использовал режим "w", то я не знаю, что происходит;Я напрямую получаю сообщение типа >Unknown Command.Это ошибка, которую дает эта команда, когда мы даем разные варианты.Так что это что-то восприняло как режим записи.

Ответы [ 2 ]

1 голос
/ 27 января 2012

Вы можете иметь две пары каналов (созданные с помощью системного вызова pipe (2) );один для данных из вашей программы на obex_test s stdin и один для obex_test s stdout для вашей программы.Тогда вы будете fork и execve ... Остерегаться тупиков (ваша программа заблокирована при записи в obex_test stdin , когда ее выходной канал заполнен и блокирует его), вам может потребоваться вызвать1014 * poll (2) или select(2) ...

Однако, как поясняется в справочных страницах, «obex_test - это тестовое приложение для библиотеки libopenobex».Так почему бы не вызвать напрямую функции внутри этой библиотеки libopenobex , которую вы бы связали с вашей программой?

0 голосов
/ 27 января 2012

Вы можете использовать системную команду.Проверьте страницу руководства для более подробной информации.Например, система ("obex_test -b 172.16.7.1 1234");

...