LINUX.ORG.RU

Advanced Linux Programming


0

0

учусь правильно писать под linux, в качестве руководства использую книжку "Advanced Linux Programming", вот так вот :)

ps: хз как сдавать лабу буду, хорошо бы glibc и хедеры под винду найти где-нибудь....

>>> Просмотр (1280x1024, 141 Kb)



Проверено: Pi ()

И что только люди не делают, чтобы не пользоваться screen`ом :)) (предварительно его настроив ;))

Cy6erBr4in ★★★
()

live cd сделай и сдавай свою лабу :)

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

кстати да... ноут был бы удобен, только денег нет :( а если будут то куплю себе всётаки не ноут а гитару ....

f0rk
() автор топика

зачод. Приятно смотрится, особенно рамки окон

lester_dev ★★★★★
()

почему вим не гуевый? в терминале убого смотрится

anonymous
()

совет: лаба? пиши тупо и просто, ну либо просто, но тупо.
ибо тратить силы на подобные вещи - грех.
во имя CAD.

kbps ★★★
()

за do { ... } while; низачот

почитай еще книжку "Веревка достаточной длины, чтобы выстрелить себе в ногу" Алена Голуба :)

anonymous
()

За книгу ЗАЧЕТ! Тоже ее курил.. %)

А сдавать можно на Knoppixe )

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

>за do { ... } while; низачот > >почитай еще книжку "Веревка достаточной длины, чтобы выстрелить себе в ногу" Алена Голуба :)

В САД!

>Никогда не используйте do/while для БЕСКОНЕЧНОГО цикла

anonymous
()

Conky эротично выставлены на обозрение =)

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

>за do { ... } while; низачот

Да нафига он вообще нужен? for наше фсё! =) Бесконечный цикл? Пожалуйста: for (;;) { ... } :)

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

> куча gnome-terminal-ов с закладками - незачет.

Это стандартный Terminal из Xfce, так-что ломай дальше виндовый slickedit, набирайся уму-разуму %)

los_nikos ★★★★★
()

> хз как сдавать лабу буду, хорошо бы glibc и хедеры под винду найти где-нибудь....

Надо всё-таки отталкиваться от того что это лабы, а цель их - показать свои знания решением задачи. Смотри в сторону стандартов ISO C, C99 и т.д.

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

>> ps: хз как сдавать лабу буду, хорошо бы glibc и хедеры под винду найти где-нибудь....

> http://www.mingw.org/ Там, AFAIR, нет getopt'а, т.е. конкретно этот код собрать не полчится.

f0rk, IMHO, вариант один - LiveCD, тот же KNOPPIX. Хотя нас за самовольную загрузку чего-то своего на машины в терминалке сильно ругали. Правда, это давно уже было, LiveCD тогда не было, равно как и CD-ромов на машинах ;)

P.S. За установку софта (это к вопросу про MinGW) тоже сильно ругали.

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

>Надо всё-таки отталкиваться от того что это лабы, а цель их - >показать свои знания решением задачи. Смотри в сторону стандартов >ISO C, C99 и т.д. >los_nikos (*) (18.11.2006 20:39:16)

Угу, именно... думаю для сдачи этой лабы преподу гораздо интересней было бы увидеть собственную реализацию парсинга аргументов командной строки, а не видеть зачем-то притащеный glibc с ним... Заодно портабельней бы было, собственная-то реализация... И совет - отделяй парсинг данных командной строки(оно же в гуях называется представлением) от алгоритма твоей программы(оно же движок), т.е. юзай функции... приведённый фрагмент толком ничего не делает, а занимает уже аж экран - нормальный преп похоронит...

anonymous
()

Ээ.. это у тебя одна функция такая длинная?

dave ★★★★★
()

Кстати, если программа остается в рамках стандартных либ, то тогда можно под виндой откомпилировать родным транслятором. Из бесплатных есть борлондовский, Digital Mars C/C++ и тот же Visual C++ ;)

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

>В САД! >>Никогда не используйте do/while для БЕСКОНЕЧНОГО цикла

[quote из хорошей книжки] 60. Избегайте циклов do/while

Цикл do/while опасен в принципе, так как вы обязательно выполняете его тело хотя бы один раз. Следовательно, вы должны проверить условия завершения до входа в этот цикл. Я часто вижу код, похожий на следующий:

if( !проверить_нечто )

return ERROR;

do

{

начинка();

} while( проверить_нечто );

Вам гораздо лучше сделать так:

while( проверить_нечто )

начинка();

Похожий случай:

if( некое_условие() )

do

// масса материала

while( некое_условие() && другой_материал() );

легче трактовать следующим образом:

while( некое_условие() )

{

// масса материала

if( !другой_материал() )

break;

}

Я профессионально занимаюсь программированием с 1979 года и за это время использовал цикл do/while всего два раза. [/quote]

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

ты видишь в данном коде if( !проверить_нечто ) перед do ? имхо использовать do {} while в данном случае нормально

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

Совет сишника. В C++ можно объявлять переменные внутри блока. Тогда для реализации, например, математических алгоритмов цикл do {} while очень удобен - в начале цикла создаются нулевые внутренние переменные, которые будут использоваться, и нужен хотя бы один проход цикла чтоб проверить, сразу ли выполнится условие или нужно еще покрутить. В этом случае легко избегается типичная регрессионная ошибка - занулить перед рассчетами не все переменные( если их много - разнообразных dxx, dxy, dxz и т.п.) Так что лучше судить не по книжкам, а по собственному опыту +)

anonymous
()

Насчёт konky, он вообще умеет не мерцая (тоесть используя двойной буфер), не убивать иконки на десктопе. own_window yes использовать не прикольно, так как постоянно висит открытое окошко, которое напрягает больше чем его обновления. Вариант - иконки зло, не покатит, нужно иенно так. А скрин приятный.

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

последний конки вроде умеет прятать декор и себя из таскбара, хотя не уверен, сам просто не использую иконки)

f0rk
() автор топика

gtkrc:

style "notebook" = "default"
{
  xthickness                     = 1
  ythickness                     = 0
}

class "GtkNotebook" style "notebook"

~/.config/Terminal/terminalrc 
MiscTabCloseButtons=FALSE

С такими изменениями табы почти в два раза уже.

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

/me 3 года сдавал лабы на ноуте. Зависит от препода.

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

Не спорю... но и смысла запускать в том же терминале, сессию на другую машину по ссх тоже не вижу смысла, для этого у меня отдельный терминал

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

>oпоследний конки вроде умеет прятать декор и себя из таскбара, хотя не уверен, сам просто не использую иконки)

Действительно умеет, по крайней мере 1.4.4 : wn_window_type override.

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

"Не видишь суслика, а он есть" (ц)

Зачем запускать лишний терминал, когда все может быть в одном с табами. Причем если нужно, таб еще детачнуть можно в отдельное окно.

Так что есть смысл.

mrdeath ★★★★★
()

Ну, не плохо. Работа с файловыми дескрипторами, getopt_long. Только вот вместо do/while с abort лучше было бы использовать while с default "use --help". А то, аварийный останов понимаешь происходит :)

mutronix ★★★★
()

Программирование под Линуксом это 5+ !!! Молодец. А сдавать можно конечно разными способами. Я, на пример, с ноутам сейчас сдаю, если нужен GUI интерфейс, правда носить его не люблю, поэтому по возможности пишу на простом С и до сдачи подправляю код в институте на Борлондо-Билдоровском компиляторе. Компы в институте обычно настроены так, что загружать с CD нельзя, так что с liveCD сдавать - редкий вариант.

PM85 ★★
()

да всё, вроде, неплохо.. но, требует некоторой доработки..

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

Блин, ну вы даете... Какая разница где программировать такие тривиальные приложения - под винду или линукс или солярис? Программировать надо под задачу, а не под систему... Вы можете весь код написать под Visual C++ 6.0 c Visual Assist и установленым ICC, а затем просто скопировать на линуксовую машину и скомпилять... А можете и в vim'е накатать прогу и скомпилять её потом в VS2005... И круть ваша, как начинающих программистов, будет только в том, чтоб и в том и в другом случае одинаковый код компилился без ошибок, warning'ов и info-в всяких, для чего его лучше затем прогонять чем-то вроде lint ну и компилять со всякими ключами типа -pedantic в gcc... так что учитесь студенты, что отнюдь не IDE и текстовый редактор определяют качество кода...

anonymous
()

цикл разбора аргументов таки написан некошерно:

проверка на -1 двойная - надо выпасть из switch, и потом сматчиться в while по ровно такому же условию - это неправильно.

int option;

while( (option = getopt()) != -1 ) { swith (option) {

так лаконичнее и понятнее (хотя это один из очень немногих случаев когда имеетсмысл объединять в одной строке присваивание и проверку - ибо идиома).

и по незнакомой опции надо вызывать не abort - зачем тебе корка в этом случае, а что-то типа usage() - который печатает краткую справку и выходит с ненулевым статусом.

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

>там, AFAIR, нет getopt'а, т.е. конкретно этот код собрать не получится.

Автор тут использует даже не getopt() а вообще getopt_long() -- такой код даже на *BSD и разные специфические юниксы может быть проблематично переносить. getopt() хотя бы есть в POSIX, а вот getopt_long() нет :(

В своё время когда исследовал вопрос портирования кода на винду нагугливал xgetopt() (http://www.codeproject.com/cpp/xgetopt.asp), его в принципе и можно юзать.

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

>while( (option = getopt()) != -1 ) { swith (option) { так лаконичнее и понятнее

Полностью согласен.

>(хотя это один из очень немногих случаев когда имеетсмысл объединять в одной строке присваивание и проверку - ибо идиома).

У меня присваивание с проверкой встречается в программе ровно один раз: при использовании getopt()

>и по незнакомой опции надо вызывать не abort - зачем тебе корка в этом случае, а что-то типа usage() - который печатает краткую справку и выходит с ненулевым статусом.

Опять же полностью согласен.

php-coder ★★★★★
()

Мне кажется, у тебя выход за границы массива присутствует в следующем коде:

int i, ind[MAX];
for (i = 0; i <= MAX; i++)
ind[i] = i;

Тут в цикле надо вместо <= поставить знак <, чтобы не было выхода за границы массива.

php-coder ★★★★★
()

P.S. Если правильно помню, то в универе у меня было в точности такое же
задание с книжками :) Вот только писать надо было на Pascal'e.

*покопавшись в ~/Pascal* Мда.. почти такая же.. там про книжную полку :)
Прикольно.. Вот кусок из моего меню (я тогда ещё и комментарии и вывод
программы писал на русском):

  1 Program my_bookshelf;
  2 (*
  3  
  4 Author:      php-coder <php-coder / ngs.ru>
  5 Date:        22.12.2004
  6 Last update: 22.12.2004     
  7  
  8 Powered by gvim! Made in Russia! :))
...
234 (*----------------------------------------*)
235 (*     S T A R T  P R O G R A M ! :-)     *)
236 (*----------------------------------------*)
237 Begin
238 bookbd := '/home/coder/Pascal/irgz/bookbd.dat';
239 
240 clrscr;
241 writeln('Что сделать? Эта программа способна:',
242 #13#10, '1) Добавить запись о новой книге в базу данных',
243 #13#10, '2) Осуществить распечатку о книгах по программированию',
244 #13#10, '3) Распечатать список задачников по алгебре',
245 #13#10, '4) Определить количество книг, превышающих по объему 300 страниц',
246 #13#10, '5) Распечатать название и цену самой дорогой книги по истории',
247 #13#10, '6) Выйти');
248 
249 repeat
250  write(#13#10, 'Введите номер требуемой операции: ');
251  readln(what);
252 
253  case what of
254   1:  add_book();
255   2:  print_program_books();
256   3:  print_algebra();
257   4:  calculate_more300();
258   5:  print_most_dearly_history_book();
259  end;
260 
261 until what = 6;
262 
263 End.

php-coder ★★★★★
()

Низачот за такой ненастроеный вим. Для начала хотя бы сделай set bg=dark (а то он схему для белого фона поставил и получилось нечитабельно), потом возьми чей-нибудь приличный vimrc, и наконец сделай хороший свой..

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

Я тоже долго парился: liveCD или MinGW.

Остановился на MinGW: Косольные лабы на ура, GUI'шные MinGW+Qt4.

Это проще быстрее и удобнее чем по пол часа выдуривать у админа код bios'a, для машины, за которую удалось сесть.

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

>почитай еще книжку "Веревка достаточной длины, чтобы выстрелить себе в ногу" Алена Голуба :)

Enough rope to shoot yourself in the foot

Где здесь про длину?!! "Достаточно верёвки, чтобы прострелить себе ногу".

Книга интересна только как описание мытарств автора во времена дорогого машинного времени :) Вместо всего остального читай "Искусство программирования в UNIX".

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

> Типа пароль на bios. :)

Если погуглишь, то найдешь программу, способную его из BIOS'а достать. Софтина, кажется, из одного файла на С состоит. Под Linux'ом откомпилировалась сразу и без проблем (вот что значит кроссплатформенность) и я вспомнил пароль... после того, как его увидел :-)

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