Ada_Ru форум

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

Адский ввод/вывод

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

Сообщения

Александр Никольников
Адский ввод/вывод
2005-07-28 08:06:25

Привет !

 

Помогите новичку разобраться с адским вводом/выводом.

Хочу выводить в stdout двоичные данные. Написал вот так:

 

with Ada.Streams.Stream_IO; use Ada.Streams.Stream_IO;

with Ada.Streams.Stream_IO.C_Streams;

with Interfaces.C_Streams;

 

procedure Stream is

Out_Stream : File_Type;

Data : Integer := 16#aaffcc#;

begin

--Create (Out_Stream, Out_File, "test-out");

Ada.Streams.Stream_IO.C_Streams.Open (Out_Stream, Out_File, Interfaces.C_Streams.stdout);

Integer'Write (Stream (Out_Stream), Data);

end Stream;

 

Программа вылетает с сообщением:

raised ADA.IO_EXCEPTIONS.USE_ERROR : a-ststio.adb:371

 

В этом месте вызывается fseek, так что причина понятна.

Если заменить Open на Create, то всё замечательно.

Возможно я что-то упустил. Подскажите. Не дайте погибнуть ;)

 

--

Саша

Александр Никольников wrote:

Привет !

 

Помогите новичку разобраться с адским вводом/выводом.

Хочу выводить в stdout двоичные данные. Написал вот так:

 

with Ada.Streams.Stream_IO; use Ada.Streams.Stream_IO;

with Ada.Streams.Stream_IO.C_Streams;

with Interfaces.C_Streams;

 

procedure Stream is

Out_Stream : File_Type;

Data : Integer := 16#aaffcc#;

begin

--Create (Out_Stream, Out_File, "test-out");

Ada.Streams.Stream_IO.C_Streams.Open (Out_Stream, Out_File, Interfaces.C_Streams.stdout);

Integer'Write (Stream (Out_Stream), Data);

end Stream;

 

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

 

Использование всяких реализационно-зависимых пакетов (типа

Ada.Streams.Stream_IO.C_Streams) конечно возможно, но не является "правильным".

 

 

--

Vadim Godunko

--- In ada_ru@yahoogroups.com, Vadim Godunko <vgodunko@r...> wrote:

áÌÅËÓÁÎÄÒ îÉËÏÌØÎÉËÏ× wrote:

ðÒÉ×ÅÔ !

 

ðÏÍÏÇÉÔÅ ÎÏ×ÉÞËÕ ÒÁÚÏÂÒÁÔØÓÑ Ó ÁÄÓËÉÍ ××ÏÄÏÍ/×Ù×ÏÄÏÍ.

èÏÞÕ ×Ù×ÏÄÉÔØ × stdout Ä×ÏÉÞÎÙÅ ÄÁÎÎÙÅ. îÁÐÉÓÁÌ ×ÏÔ ÔÁË:

 

ðÏÈÏÖÅ ÓÔÁÎÄÁÒÔÎÏÇÏ ÍÅÈÁÎÉÚÍÁ ××ÏÄÁ-×Ù×ÏÄÁ × ÓÔÁÎÄÁÒÔÎÙÅ ÐÏÔÏËÉ ÄÌÑ Stream_IO ÎÅ ÓÕÝÅÓÔ×ÕÅÔ. üÔÏ ×ÐÏÌÎÅ ÏÂÏÓÏÎÏ×ÁÎÎÏ - ×ÅÄØ ÉÓÈÏÄÑ ÉÚ ËÌÁÓÓÉÞÅÓËÏÇÏ ÎÁÚÎÁÞÅÎÉÑ ÜÔÏ ÐÏÔÏËÉ ÔÅËÓÔÏ×ÏÇÏ ××ÏÄÁ-×Ù×ÏÄÁ.

 

--

Vadim Godunko

îÁ ÄÎÑÈ ÐÅÒÅÞÉÔÙ×ÁÌ ARM, ÎÁÔËÎÕÌÓÑ, ÞÔÏ ÔÁËÉ ÍÏÖÎÏ ÜÔÏ ÓÄÅÌÁÔØ

ÓÔÁÎÄÁÒÔÙÍÉ ÓÒÅÄÓÔ×ÁÍÉ, ÉÓÐÏÌØÚÕÑ ÐÁËÅÔ Ada.Text_IO.Text_Streams

 

with Ada.Streams;

with Ada.Text_IO.Text_Streams;

 

procedure Txt_Stream is

use Ada.Text_IO;

 

Data : Ada.Streams.Stream_Element_Array (1 .. 4) :=

(16#AA#, 16#FA#, 16#CC#, 16#00#);

Stream : Text_Streams.Stream_Access :=

Text_Streams.Stream (File => Standard_Output);

begin

Ada.Streams.Write (Stream.all, Data);

end Txt_Stream;

 

--

Maxim Reznik

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

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