LINUX.ORG.RU

Системное программирование в UNIX средствами FreePascal


1

0

А.П. Полищук и С.А. Семериков написали новую книгу, охватывающую большой круг вопросов системного программирования для UNIX с использованием FreePascal, кроме разве что хакинга ядра :) Всего в книге 13 глав и 4 приложения. Каждая глава в книге заканчивается практическими упражнениями. По словам Семерикова все примеры были проверены в ALT Linux Master 2.2

Ознакомиться с текстом книги можно в FIDO конференции RU.FREE.PASCAL куда он был помещён 26.09.2005 самим Семериковым или, что более привычно, скачать по приведённому в ссылке адресу.

>>> Скачать книгу "Системное программирование в UNIX средствами FreePascal"

Ответ на: комментарий от suser

У них есть более может быть интересная книга это "Программирование в X Window средствами Free Pascal", выпущенная в 2003 году, найти её часть можно на том же сайте: http://freepascal.ru/article//book/ Более интересная, потому что систематизированой информации по X'ам явно маловато вообще, особенно на русском языке.

Что касается этой книги, то её ещё можно рассматривать как просто интересную книгу по UNIX'ам, тем более что авторы признаются:

> В основу данной книги положено второе издание руководства программиста UNIX System Programming: A programmer's guide to software development by Keith Haviland, Dina Gray, Ben Salama. Очень удачное по структуре и подбору примеров, это руководство является одним из лучших учебников по системному программированию в UNIX, поэтому с самого начала мы посчитали уместным сохранить их, исправив и дополнив в соответствии с новыми возможностями Linux/BSD и компилятора Free Pascal.

Да и на Паскале, как я убедился, не так уж мало народу пишет, может эта информация поможет кому-нибудь уйти от Delphi/Windows в Linux/BSD, а в книге даются корректные правила программирования в Unix.

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

Месье знают толк в извращениях. Понятно что это можно делать на сабже, только зачем? Системный кодинг на паскале был актуален под дос 15 лет назад. Сейчас и в никс системах это пахнет некрофильством.

abrasiv
()

Мегаруллёз !!!!
Теперь ждём кто первый напишет "Методика написания кернелов типа как в Альт Линухе за 21 день одной мышой через Визуал Васик для домохозяек"

anonymous
()

имхо люди которые определяют развитие давно отошли от паскаля, или я не прав ?

Syncro ★★★★★
()

мда.. еще бы на алголе, фортране или языке Ада (хехе) ядро-хакингом занимались..

anonymous
()

Ну чтож, тоже полезное дело человеки замутили....

anonymous
()

Не, паскаль -- неспортивно, давайте сразу средствами VB.NET...

anonymous
()

Что мне нравится в паскале, так то что глобальные переменные можно объявлять только в одном месте. Представляю, насколько бы могла затянуться отладка многопоточности в одом проекте на паскеле, если бы глобальные переменные были бы раскиданы по всему коду, как это бывает у программистов, с плохим стилем С/С++.

Хотя сам пишу больше на С/С++, но к паскалю отношусь хорошо. Чего и вам желаю.

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

> Дети, блин. Если бы не pascal, у нас бы не было vi :)

А я то почему-то считал, что во всем виноват медленный модем (тогда быстрее то и не было) Билла Джоя.

"So I had a terminal at home and a 300 baud modem so the cursor could move around and I just stayed up all night for a few months and wrote vi."

"It was really hard to do because you've got to remember that I was trying to make it usable over a 300 baud modem. That's also the reason you have all these funny commands."

Так что вся "изюминка" vi была следствием медленного модемного доступа.

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

У Паскаля менее гибкий синтаксис, чем у Си и макры отсутствуют, одно только begin...end задалбывает иногда, не говоря уж про навороченные выражения с преобразованиями типов, например. Или оператор with -- вот уж в чём в Си просто нет потребности. Тем не менее, никто не мешает в Си выдерживать строгий стиль и не раскидывать те же глобальные переменные по коду.

Мне в паскале (FreePascal'е), по сравнению с Си (Си++) больше нравится поддержка многомодульности на уровне языка, вложенные функции, а если говорить про ООП, то как-то логичнее оно добавлено к паскалю, чем в Си++

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

2anonymous (*) (03.10.2005 1:10:20): мда.. еще бы на алголе, фортране или языке Ада (хехе) ядро-хакингом занимались..

Хехе, вот на Аде-то хакингом реалтаймовых юниксов и занимаемся, поэтому у меня в гараже стоит BMW X5 http://www.bmwusa.com/vehicles/x5/30i/default и Porsche 911 carrera http://www11.porsche.com/usa/models/911/911-carrera/) :P , а вот Вы судя по всему занимаетесь кодингом на ся и у вас стоит в гараже запорожец :)

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

Строки в паскале - рулез! По некоторым данным, 90% процессорного времени в сишных программах уходит на поиск конца строки. В паскале такого нет, и слава богу! :-)

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

>Строки в паскале - рулез! По некоторым данным, 90% процессорного времени в сишных программах уходит на поиск конца строки. В паскале такого нет, и слава богу! :-)

Бред! Или ты на С/С++ работае только с текстом? Linux Kernel 90% времени сьедают строки???

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

Конечно рулез, не более 255 символов! Зато в C++ можно реализовать строки по разному, например при помощи STL.

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

> систематизированой информации по X'ам явно маловато вообще, особенно на русском языке

ну, по X есть и довольно исчерпывающая тему, хотя бы даже те доки, которые с ними идут. Еще, когда я их изучал, наткнулся на неплохую книгу по иксам обычным поиском в гугле, вот жаль не помню автора.

> Да и на Паскале, как я убедился, не так уж мало народу пишет,

Вот когда я в универе учился, у нас говорили - паскаль язык студентов а C язык профессионалов. В принципе, может из-за этого я и начал Ц изучать, и поверьте не жалею об этом.

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

> Delphi 16 бит

Вызывающе неверная информация: http://delphi.about.com/od/beginners/l/aa071800a.htm

> All 32-bit Delphi versions use long strings by default. Delphi 2 brought to Object Pascal Long String type. Long string (in Delphi's help AnsiString) represents a dynamically allocated string whose maximum length is _limited_ _only_ _by_ _available_ _memory_.

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

With плох при неумеренном употреблении. Так-же, как и разброс переменных по коду в си.

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

>>Строки в паскале - рулез! По некоторым данным, 90% процессорного времени в сишных программах уходит на поиск конца строки. В паскале такого нет, и слава богу! :-)

Вы паскалевскую строку хоть раз видели? Указатель на строку нулевой длины чему равен? Адресу буффера? Правильно, он равен null. Потому даже для юзанья виновых dll требуется строка сишная. Тобиш ваш пчар. И 90% процентов процессорного времени в паскалевской проге тратится на подобные никому не нужные проверки и преобразования.

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

s:=s+'1'; - красиво, просто и пожирает время микропроцессора: выделяет память, копирует старую строку, добавляет в конец символ, освобожает старую область памяти. За редкими исключениями так все и происходит. Резюме - не для системного программирования.

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

>Вы паскалевскую строку хоть раз видели? Указатель на строку нулевой длины чему равен? Адресу буффера? Правильно, он равен null. Потому даже для юзанья виновых dll требуется строка сишная. Тобиш ваш пчар. И 90% процентов процессорного времени в паскалевской проге тратится на подобные никому не нужные проверки и преобразования.

Длинные паскалевские строки совместимы с pchar. Адрес строки - указатель на область памяти, длина строки - 4 байта СЛЕВА от начала этой области.

anonymous
()

у меня стоит toyota corolla ceres и я пишу на перле ;) а паскаль знаю.. иногда еще сниться в кошмарах - TURBO pascal!! haa

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

>>Длинные паскалевские строки совместимы с pchar. Адрес строки - указатель на область памяти, длина строки - 4 байта СЛЕВА от начала этой области.

Вот про них то я и говорю. Указатель этот меняется во время исполнения, принимая иногда значения null. Внутри паскаля string удобен, спору нет, там же где дело идет о системном программировании, тобишь о взаимодействии с системой эта "совместимость" выходит боком. Да что говорить, реализация дельфевых компонент открыта, там винапи конкретно юзают. "Удобства" паскаля в качестве системного языка невооруженным глазом видны.

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

> Вот когда я в универе учился, у нас говорили - паскаль язык студентов а C язык профессионалов.

Ты прислушиваешься ко всем глупостям, которые тебе говорят? Может, ты и учение Грабового распространяешь добровольно?

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

Нечитабельностью кода. Очень сложно определить, к полям какого record-а идёт обращение, особенно когда всякие криволапые задницы пишут with на три страницы.

MAPA3MATuK
()
Ответ на: комментарий от Selecter

>что тоже захотелось его ПОЗНАТЬ! :-)

"Не пей из копытца, козленочком станешь" (с) сестрица Аленушка

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

Да ладно на Сишные строки гнать. Нормальные они, если с Хаскеллем сравнивать - так просто верх эффективности.

MAPA3MATuK
()
Ответ на: комментарий от suser

> Делать больше нечего, чем заниматься системным программированием на паскале.

Не занимайся, найдутся те, кто востребует.

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

> Linux Kernel 90% времени сьедают строки???

Пока нет, но подожди, всё скоро изменится... ;-F) Вот Linux Registry доделают и... :)

atrus ★★★★★
()

function copyfile(name1, name2: string):integer;
var
infile, outfile: integer; (*─┼╙╦╥╔╨╘╧╥┘ ╞┴╩╠╧╫*)
nread: longint;
buffer: array [0..BUFSIZE-1] of byte; (*┬╒╞┼╥ ─╠╤ ▐╘┼╬╔╤/┌┴╨╔╙╔*)
begin

infile := fdopen (name1, Open_RDONLY);
if infile=-1 then
begin
copyfile:=-1; (*╧█╔┬╦┴ ╧╘╦╥┘╘╔╤ ╨┼╥╫╧╟╧ ╞┴╩╠┴*)
exit;
end;

outfile := fdopen (name2, Open_WRONLY or Open_CREAT or Open_TRUNC, octal(PERM));
if outfile=-1 then
begin
fdclose(infile);
copyfile:=-2; (*╧█╔┬╦┴ ╧╘╦╥┘╘╔╤ ╫╘╧╥╧╟╧ ╞┴╩╠┴*)
exit;
end;

(* ■╘┼╬╔┼ ╔┌ ╞┴╩╠┴ name1 ╨╧ BUFSIZE ╙╔═╫╧╠╧╫ *)
nread := fdread (infile, buffer, BUFSIZE);
while nread > 0 do
begin
(* ·┴╨╔╙┴╘╪ buffer ╫ ╫┘╚╧─╬╧╩ ╞┴╩╠. *)
if fdwrite (outfile, buffer, nread) < nread then
begin
fdclose (infile);
fdclose (outfile);
copyfile:=-3; (* ╧█╔┬╦┴ ┌┴╨╔╙╔ *)
exit;
end;
nread := fdread (infile, buffer, BUFSIZE);
end;

(*┌┴╦╥┘╫┴┼═ ╨╥╧▐╔╘┴╬╬┘┼ ╞┴╩╠┘*)
fdclose (infile);
fdclose (outfile);

if (nread = -1) then
copyfile := -4 (* ╧█╔┬╦┴ ╨╥╔ ╨╧╙╠┼─╬┼═ ▐╘┼╬╔╔ *)
else
copyfile := 0; (* ╫╙┼ ╨╧╥╤─╦┼ *)
end;

Если вот это "системное" программирование, то тогда я - конь в пальто.

Наверное в каком-нибудь perl это можно сделать на половине строки.

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

>Адрес строки - указатель на область памяти, длина строки - 4 байта СЛЕВА от начала этой области.

Мда. Паскаль жжот, однако. Мне такого в страшном сне не приснится...

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

>> длина строки - 4 байта СЛЕВА от начала этой области. Рулез!

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

Да нет, по хорошему в perl копирование файла делается так же как и в C, и так же, как написано в этом примере. Просто на C это лаконичнее выглядит. А на perl можно хорошо копировать файл с коротким текстовыми строками:

open F, "<file.from"; open G, ">file.to"; print G while (<F>);

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

Да нет, по хорошему в perl копирование файла делается так же как и в C, и так же, как написано в этом примере. Просто на C это лаконичнее выглядит. А на perl можно хорошо копировать файл с коротким текстовыми строками:

open F, "<file.from";
open G, ">file.to";
print G while (<F>);

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