Модуль Linux

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
Tamachi
новенький
Сообщения: 10
Зарегистрирован: 01.10.2007 14:31:38

Модуль Linux

Сообщение Tamachi »

Сегодня решил попробовать написать консольное приложение (dfm2xml)
в стиле Unix.то есть такое, с которым можно было бы общаться в
традиционном для *nix-системы стиле, например, так

ls *.dfm | dfm2xml

(список всех DFM-файлов послать на вход утилиты DFM->XML преобразователя )

И тут вдруг выяснилось, что для написания подобных программ необходимо
иметь установленным модуль "linux", а в тексте pascal-программы использовать
"uses linux". Об этом пишут А.П.Полищук, С.А.Семериков в книге "Системное программирование в UNIX средствами Free Pascal", скачать её можно тут:
http://freepascal.ru/download/book/sysfpc.zip

Пробовал искать отсутствующий модуль на ftp.freepascal.org.
Не нашёл. Если у кого есть -- поделитесь plz!
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

его переименовали в oldlinux
но советую пользоваться BaseUnix
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

Tamachi писал(а):в стиле Unix.то есть такое, с которым можно было бы общаться в
традиционном для *nix-системы стиле, например, так

ls *.dfm | dfm2xml

Никогда не пробовал, но помоему тоже самое можно было бы сделать на чистом RTL
v-t-l
энтузиаст
Сообщения: 745
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение v-t-l »

shade писал(а):Никогда не пробовал, но помоему тоже самое можно было бы сделать на чистом RTL

Конечно можно - readln, writeln - работают замечательно, но только если входной поток - текстовый.
Аватара пользователя
Alexander
энтузиаст
Сообщения: 888
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение Alexander »

А BlockRead/Write со stdIN/OUT разве не работают ?
Аватара пользователя
Alexander
энтузиаст
Сообщения: 888
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение Alexander »

Tamachi писал(а):Пробовал искать отсутствующий модуль на ftp.freepascal.org.

Не нашёл. Если у кого есть -- поделитесь plz!


В книге действительно использовался старый ФПК, и в новом он
был переименован в OldLinux, а теперь (2.2.0) его совсем нету.
Большинство функций перенесено в Linux, BaseUnix, Unix.

Итак:

Код: Выделить всё

uses Linux, BaseUnix, Unix;
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

Большинство функций перенесено в Linux, BaseUnix, Unix.

ты уверен ? там не перенесено, а добавлены схожие по функциональности, но с другими названиями =)

точно не разбирался но вроде как под новый версии библиотек.
Аватара пользователя
Alexander
энтузиаст
Сообщения: 888
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение Alexander »

Да, иногда нужно добавлять приставку "fp". Но в целом туда.
Ведь другого то уже нет, паровоз уехал.
Tamachi
новенький
Сообщения: 10
Зарегистрирован: 01.10.2007 14:31:38

Сообщение Tamachi »

v-t-l писал(а):
shade писал(а):Никогда не пробовал, но помоему тоже самое можно было бы сделать на чистом RTL

Конечно можно - readln, writeln - работают замечательно, но только если входной поток - текстовый.


к сожалению readln читает с клавиатурной консоли, но не из стандартного потока.
v-t-l
энтузиаст
Сообщения: 745
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение v-t-l »

Код: Выделить всё

Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.

c:\lazarus\PROJECTs\rrr>type project1.lpr | project1.exe
Read:program project1;
Read:var s: String;
Read:begin
Read:  while not Eof() do
Read:  begin
Read:    Readln(s);
Read:    Writeln('Read:',s);
Read:  end;
Read:end.
Read:

c:\lazarus\PROJECTs\rrr>
Tamachi
новенький
Сообщения: 10
Зарегистрирован: 01.10.2007 14:31:38

Сообщение Tamachi »

v-t-l писал(а):

Код: Выделить всё

Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.

c:\lazarus\PROJECTs\rrr>type project1.lpr | project1.exe
Read:program project1;
Read:var s: String;
Read:begin
Read:  while not Eof() do
Read:  begin
Read:    Readln(s);
Read:    Writeln('Read:',s);
Read:  end;
Read:end.
Read:

c:\lazarus\PROJECTs\rrr>


Спасибо! Это сработало!
Tamachi
новенький
Сообщения: 10
Зарегистрирован: 01.10.2007 14:31:38

Сообщение Tamachi »

Какой командо можно на FreePascal осуществить вывод на стандартный поток ошибок?
Аватара пользователя
Alexander
энтузиаст
Сообщения: 888
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение Alexander »

WriteLn(stderr, 'Hello World !');
v-t-l
энтузиаст
Сообщения: 745
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение v-t-l »

Кстати, если нужно использовать Stream:

Код: Выделить всё

procedure TForm1.FormCreate(Sender: TObject);
var Stream: TStream;
begin
  Stream := THandleStream.Create(StdInputHandle);
  Memo1.Lines.LoadFromStream(Stream);
end;
Ответить