Модуль Linux

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

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

Модуль Linux

Сообщение Tamachi » 06.10.2007 11:09:41

Сегодня решил попробовать написать консольное приложение (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!
Tamachi
новенький
 
Сообщения: 10
Зарегистрирован: 01.10.2007 14:31:38

Сообщение Attid » 06.10.2007 11:15:56

его переименовали в oldlinux
но советую пользоваться BaseUnix
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2586
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение shade » 06.10.2007 13:12:53

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

ls *.dfm | dfm2xml

Никогда не пробовал, но помоему тоже самое можно было бы сделать на чистом RTL
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение v-t-l » 06.10.2007 16:02:04

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

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

Сообщение Alexander » 06.10.2007 19:41:52

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

Сообщение Alexander » 06.10.2007 19:53:32

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

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


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

Итак:
Код: Выделить всё
uses Linux, BaseUnix, Unix;
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 823
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение Attid » 06.10.2007 23:16:42

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

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

точно не разбирался но вроде как под новый версии библиотек.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2586
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение Alexander » 06.10.2007 23:20:55

Да, иногда нужно добавлять приставку "fp". Но в целом туда.
Ведь другого то уже нет, паровоз уехал.
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 823
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение Tamachi » 07.10.2007 13:07:12

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

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


к сожалению readln читает с клавиатурной консоли, но не из стандартного потока.
Tamachi
новенький
 
Сообщения: 10
Зарегистрирован: 01.10.2007 14:31:38

Сообщение v-t-l » 07.10.2007 13:24:02

Код: Выделить всё
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>
v-t-l
энтузиаст
 
Сообщения: 740
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение Tamachi » 07.10.2007 13:37:17

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

Вывод на stderr

Сообщение Tamachi » 08.10.2007 09:55:03

Какой командо можно на FreePascal осуществить вывод на стандартный поток ошибок?
Tamachi
новенький
 
Сообщения: 10
Зарегистрирован: 01.10.2007 14:31:38

Сообщение Alexander » 08.10.2007 10:26:29

WriteLn(stderr, 'Hello World !');
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 823
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение v-t-l » 08.10.2007 13:14:09

Кстати, если нужно использовать Stream:
Код: Выделить всё
procedure TForm1.FormCreate(Sender: TObject);
var Stream: TStream;
begin
  Stream := THandleStream.Create(StdInputHandle);
  Memo1.Lines.LoadFromStream(Stream);
end;
v-t-l
энтузиаст
 
Сообщения: 740
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Рейтинг@Mail.ru