Ada_Ru форум

Обсуждение языка Ада

serial ports and Ada

Оставить новое сообщение

Сообщения

Boris Samorodov
serial ports and Ada
2006-11-10 16:04:08

Бодрый вечер!

 

 

Есть ли возможность в Аде работать с файлами одновременно на запись и чтение? Сейчас работа с последовательным портом организована через ассемблерные коды outb и inb. Но для этого приходится давать права суперпользователя. Хотелось бы этого избежать.

 

OS FreeBSD, gnat-gcc41.

 

Спасибо.

 

 

WBR

--

bsam

Boris Samorodov wrote:

 

>Бодрый вечер!

 

 

>Есть ли возможность в Аде работать с файлами одновременно на запись и >чтение?

 

Есть. И это с пол пинка находится в документации.

Например так можно.

-----------

*with* Ada.IO_Exceptions;

*package* Ada.Streams.Stream_IO *is*

4

*type* Stream_Access *is* *access* *all* Root_Stream_Type'Class; 5

*type* File_Type *is* *limited* *private;*

6

*type* File_Mode *is* (In_File, Out_File, Append_File);

7

*type* Count *is* *range* 0 .. /implementation-defined/; *subtype* Positive_Count *is* Count *range* 1 .. Count'Last;

-- /Index into file, in stream elements./

8

*procedure* Create (File : *in* *out* File_Type;

Mode : *in* File_Mode := Out_File;

Name : *in* String := "";

Form : *in* String := "");

----------------

Есть еще способы. И их так же легко найти.

Dmitriy Anisimkov wrote:

 

>Boris Samorodov wrote:

 

 

 

>Бодрый вечер!

 

 

>Есть ли возможность в Аде работать с файлами одновременно на запись и >чтение?

 

 

 

>Есть. И это с пол пинка находится в документации.

 

 

Забыл сказать в какой документации, называется Ada Reference Manual.

Boris Samorodov wrote:

 

Есть ли возможность в Аде работать с файлами одновременно на запись и

чтение? Сейчас работа с последовательным портом организована через

ассемблерные коды outb и inb. Но для этого приходится давать права

суперпользователя. Хотелось бы этого избежать.

 

OS FreeBSD, gnat-gcc41.

 

Если речь идёт конкретно о последовательных портах в среде UNIX, то можно использовать средства библиотеки Florist. Она позволяет производить как ввод/вывод (POSIX.IO) так и настройку переметров порта (POSIX.Terminal_Functions).

Можно попробовать работать с портами как с файлами (у меня это /dev/cuad0 и /dev/cuad1, на старых версиях фря был cuaa...). Соответвенно надо пользователя добавить в соответвующую группу, которой можно писать в порт (у меня это группа dialer, для нее права "rw").

 

ИМХО: это по-моему более корректный для юниксов способ, чем напрямую ассемблером. :-)

 

Aleksey Y. Ulasevich (STAKANOV)

icq:26493224 http://stakanov.narod.ru

 

> параметров портов сделать можно и по-другому. Мне же не хватает (в

> смысле не умею) только одновременного записи/чтения. Но если других

 

Можно еще посмотреть Interfaces.C_Streams

Это вообще тонкий биндинг Сишных fopen(...) & etc

 

С Сишными бингами проблем не должно быть. Если ничего родного не

получится, будем думать, что выбрать -- либо оставить права суперюзера

(и ничего не переделывать), либо использовать Сшные биндинги.

 

Раз ОС блокирует, то другого выхода нет.

Новое сообщение:
Страницы: 1

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти