LINUX.ORG.RU

Как скрипт превратить в программу на Cи?


0

1

Существует задача: считывать строку с GPS /dev/ttyS1, обрабатывать и отправлять куда надо. С божьей помощью и с помощью неравнодушных на этом форуме я написал скрипт, который решает эту задачу. Скрипт довольно увесистый и я решил написать программу на Си, которая бы делала тоже самое. Правильный ли подход:

  • с помощью функций стандартной библиотеки fopen() получаю указатель на файл /dev/ttyS1
  • функцией fread() читаю нужный массив символов
  • обрабатываю прочитанный массив нужным мне образом

Догадываюсь, что решения подобного рода наверняка типовые, но я впервые делаю это и у меня, естественно, есть сомнения. Каким путем пойти?
И еще. Моя программа должна работать на платформе armv5tejl. В связи с этим вопрос - будут ли работать программа с этими стандартными функциями, если ее компиллировать с помощью gcc или нужен кросс-компиллятор?

Обычно с ttyS работают через open()/read(), а не через fopen().

Подход правильный, только всё «интересное» уровнем ниже — работа с памятью и со строками, чтобы сегфолтов не было и память не текла.

если ее компиллировать с помощью gcc или нужен кросс-компиллятор

gcc является кросс-компилятором. И для сборки нужен не только сам gcc, но и libc библиотека под целевую архитектуру. И, снала, лучше потренеруйтесь компилить под ваш armv5tejl простейший helloword, чтобы он запускался там где надо и не было проблем с версий libc, а уже потом начинайте писать свой код.

mky ★★★★★
()

Понимаю, что ответ типичный для ЛОРа, но всё-таки: точно ли нужен си?

И читать из последовательного порта, и потом обрабатывать данные вполне удобно на каком-нибудь Tcl или Python, писать будет гораздо проще, и а arm точно запустится без всяких кросскоммпиляторов.

anonymous
()

Возьми в качестве примера один из 100500 терминальных клиентов, да используй! Можешь и у меня на сосфорже или гитхабе покопаться. Вот, например, для работы с драйвером шаговиков SMSD, а вот — зачатки для работы с тринамиком.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от anonymous

точно ли нужен с?

То же самое спросил у меня работодатель, когда отправляя на платные курсы по Си, возлагал большие надежды на то, что я начну-таки кодить во благо общества. Если я сейчас ему про python начну заикаться или еще про что-нибудь, меня наверное попрут. А еще Си нужен чтобы познать Вселенную. Так мне сказали на курсах.

podovalov5
() автор топика
Ответ на: комментарий от podovalov5

ну ты и работничек ☺

Я смотрю, почти все твои темы на ЛОРе посвящены этой проблеме... У вас там никого нет что ли, кто хоть маленько программировать умеет?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Ну кое-что я все-таки запилил. Пусть скриптом, но все-таки работает. Программисты есть, но в основном на Delphi и под Windows. И у них свои задачи. Кстати, Eddy_Em, твои советы очень мне помогают. Спасибо тебе.

podovalov5
() автор топика
Ответ на: комментарий от podovalov5

Напиши на чистом Python, потом перепиши с использованием CPython. Там тебе навыки C пригодятся. Ну а дальше посмотри на это и подумай, хочешь ли ты все это писать на pure C, а потом еще лучше подумай, есть ли у тебя (твоего работодателя) время на эти экзирсизы.

silw ★★★★★
()
Ответ на: комментарий от podovalov5

Только в случае очень обоснованной необходимости. По ссылки выше пример реализации GPS демона, довольно простой. Можешь взять себе что-то, там и работа с tty, и обработка результатов, и все что может потребоваться ...

joy4eg ★★★★★
()
Ответ на: комментарий от four_str_sam

В принципе ничего особенного. Получаю строку символов. Из нее извлекаю широту, долготу, скорость. Упаковываю в другую строку. Вызываю curl и отправляю во внешний мир.

podovalov5
() автор топика
Ответ на: комментарий от podovalov5

А еще Си нужен чтобы познать Вселенную. Так мне сказали на курсах.

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

staseg ★★★★★
()

Ты примерно оценил все возможные риски и сложности? Действительно ли необходимо переписывать программу? Какие есть реальные минусы в существующем решении?

buddhist ★★★★★
()
Ответ на: комментарий от buddhist

Действительно ли необходимо переписывать программу? Какие есть реальные минусы в существующем решении?

Я решил переписать на C, потому что, кроме GPS, там прибавится чуть позже задач. Нужно будет опрашивать другие устройства подключенные к плате. И еще много чего делать. А писать под каждую задачу скрипт на bashe, думаю, не получится.

podovalov5
() автор топика
Ответ на: комментарий от podovalov5

ЕМНИП, gps выдаёт в канал данные построчно, по одной строке на новую позицию. Если это так, то можно спокойно делать fopen(), затем fgets(), затем sscanf для распознавания координат в строке. Строчки также имеют примерно одинаковую и небольшую длину, поэтому читать можно просто в массив, размещённый на стеке, не заморачиваясь на динамическую память.

uuwaan ★★
()

Скрипт довольно увесистый

В каком смысле? Много места на диске занимает? Так ведь программа на Си будет, скорее всего, ещё увесистей.

proud_anon ★★★★★
()
Последнее исправление: proud_anon (всего исправлений: 2)
Ответ на: комментарий от proud_anon

Может я не так выразился. Просто у меня сложился стереотип, что скрипты это что-то такое очень высокоуровневое с точки зрения программирования. И если заказчику принести скрипт, решающий задачу, он скажет: «ребята, я думал вы программисты, что вы там мне в блокноте накалякали». А если принести решающую ту же задачу откомпиллированную программу, исходники, да еще и на си, то сразу респект со всеми вытекающими... Вот такой у меня стереотип.

podovalov5
() автор топика

Элементарно. Берёшь интерпретатор скрипта (на Си) и специализируешь его относительно своего скрипта. Получаешь программу на Си.

anonymous
()

Возьми http://sigrok.org/wiki/Libserialport

Если в скрипте непрерывное полотно команд, то тупым переводом получится не очень хорошая программа на С.

Надо поделить на несколько сишных файлов, разделить логику работы от разбора протокола gps и функций чтения записи с ком порта.

Возможно решение с прямым доступом к железу в корне не правильное и надо брать gpsd и http://www.pkill.info/linux/man/3-libgps/

anonymous
()

podovalov5 а на ASM-е ты это написать не хочешь? Скрипты и придумали для удобного и надёжного администрирования или тебе числодробилка нужна? Не нравится sh/bash, пиши на python или на худой конец на PHP/rubi/perl/e.t.c. C/C++/Objective-C/Ада/Pascal/JAVA не для таких задач созданы.

peregrine ★★★★★
()
Ответ на: комментарий от podovalov5

писать под каждую задачу скрипт на bashe, думаю, не получится

Почему? bash специально создан для таких задач.

buddhist ★★★★★
()
Ответ на: комментарий от podovalov5

скрипт это клей ( так Боурн и прочии Томсоны измыслили)

Воллу надоел зоопарк из sh|bash|awk|sed|grep|самопальных на С утилит и он явил миру Пёрл.

тоже клей.

есть кстати компиляторвы sh|bash-скриптов - эдакие обфустикаторы.

qulinxao ★★☆
()
Ответ на: комментарий от qulinxao

Ты кстати читал настоящую историю С? Жуткая история на самом деле:

Выступая на недавнем UnixWorld Software Development Forum, Томпсон рассказал следующее:

Шутки ради, мы решили сделать пародию на Multics и Паскаль. Деннис и я были ответственны за операционную систему. Мы смотрели на Multics и разработали новую систему максимально сложной и загадочной насколько это возможно, чтобы максимизировать уровень разочарования случайного пользователя, назвали ее Unix как пародию на Multics, а также имея в виду другие, более рискованные аллюзии.

Потом Деннис и Брайан работали над серьезно деформированной версией Паскаля, названной А. Когда мы увидели что остальные пытаются создать реальные программы на А, мы быстро добавили дополнительные загадочные особенности и превратили его в B, BCPL и, наконец, С. Мы остановились когда следующий синтаксис чисто компилировался:

for(;P("\n"),R--;P("|"))for(e=C;e--;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);

Думать, что современные программисты будут пытаться использовать язык, в котором разрешены такие конструкции было за пределами нашего понимания!

Мы на самом деле думали о продаже этого Советам чтобы отбросить их компьютерную науку лет на 20 или больше.

http://goo.gl/XdrXDf

anonymous
()
Ответ на: комментарий от uuwaan

А интервью со Страуструпом читал?

Вот, всплывает потихоньку правда

Осталось дождаться признания Торвальдса о том что на самом деле он ненавидит линукс и набрасывает в lkml по заданию АНБ

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.