LINUX.ORG.RU

Руководство по портированию с Solaris на Linux


0

0

IBM developerWorks опубликовала статью - руководство по портированию приложений на C/C++ с Solaris на Linux. В статье расмотрены различия в системных типах, библиотеках и окружении.

>>> Статья

★★★★★

Проверено:

Вот интересно
int a=0x11121314;
char b, *ptr;
ptr= (char *) &a; // pointer ptr points to a
b= ptr[1]; // b is 0x13 in LE and 0x12 in BE


Хм а пример правильного преобразования(вытаскивания 1-го байта из int) работающий в LE и BE можно привести ?
А чет не надумал пока ничего (

И вообще можно ссылочку(ки) на описание кросплатформеного программирования ?
Вот таких камней и желательно описания их решений )))

anonymous
()

2anonymous (*) (2002-03-07 07:48:50.0): "Хм а пример правильного преобразования(вытаскивания 1-го байта из int) работающий в LE и BE можно привести ?"
Только с начала нужно выяснить, что подразумевается под int - нечто длинной в 16, 32 или 64 байта...
В качестве переносимой метода можно восполбзоватся функциями вроде htons

Ogr
()

гы, помню как в светлое начало 90-х все производители юниксов обещали, что программф на Си можно будет скомпилить на любом юниксе с минимальными переделками, зависящими от камня :-) А щас чё наделали.. Эх, ничему на слово верить нельзя:-)

anonymous
()

Так ведь Linux уже давно стал стандартом в области Unix. Куда ни ткнешь, Tested Platforms: Linux на первом месте.

А чтобы найти Sparc машинку и проверить configure, надо сильно постараться.

Соответственно, имея Linux, ты почти не будешь иметь проблем с совместимостью, ибо кто-нибудь да протестировал программу под ним. А вот за портирование на другие платформы придется отвечать самому, раз такой худой.

anonymous
()

Причем здесь Linux и не Linux?
Писать надо переносимо, а не ориентироваться на аппаратные или иные
характеристики платформы.
Это было проверено еще в конце 70-х, начале 80-х, разработчики уже
наступали на эти грабли.
Были программы переносимые - за 1 час или 1 день перетащить можно было:
вся зависимость - библиотеки, работа с терминальными линиями
(BSD/AT&T).
А были не переносимые - те переносились за недели или месяцы.
Сейчас одновременно и сложнее и проще.
Сложнее - более менее сложная программа это надстройка над кучей библиотек.
Проще - эти библиотеки зачастую уже портированны.

Так что новое - это хорошо забытое старое ;-)
Мы это уже проходили - переход с int16 -> int32, портирование с
BSD like на AT&T like и обратно.
И если для кого-то это стало открытием - то только подтверждает комунистический тезис о спиральности развития ;-)

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

Сами K&R занимались этой проблемой и придумали-таки некоторые подход к ней. Вроде как: пользуйте ~0l, вспоминайте дополнительный арифметический код, и так далее. Но толку? А пример необходиомго преобразования черезвычайно прост: typedef sruct _aaaa { a[1000]; union { int i; char c; double d; char arr[12];} } hnjq; void *p = (hnq...); (hnjq *)p->arr[1]... и т.д. Короче, вам этот мусор интересен? Мне -- нет.

Casus ★★★★★
()

А самое удивительное (кто-нть обратил внимание ?), что документ, описывающий портирование с продукта Sun на Linux родился в компании, не имеющей к ним вобщем-то никакого отношения :-)
Это сейчас модно так делать ?

anonymous
()

Что же удивительного в том, что IBM пытается использовать Linux для борьбы с конкурентами. Вот они и публикуют статьи такого рода.

anonymous
()

   2anonymous  (*)  (2002-03-07  07:48:50.0):  "Хм  а  пример правильного
   преобразования(вытаскивания  1-го  байта  из int) работающий в LE и BE
   можно привести ?"
   Только  с  начала  нужно выяснить, что подразумевается под int - нечто
   длинной в 16, 32 или 64 байта...
   В  качестве  переносимой  метода  можно восполбзоватся функциями вроде
   htons

   Ogr (*) (2002-03-07 08:10:42.0)
Ogr, ты такой же программист, как спец. по хардлинкам..
Правильный ответ:
 byte= (char)(int_value&0xff)
Или лучше
#include <limits.h>
 byte = (unsigned char)(int_value & UCHAR_MAX)
Если нужно поддерживать машины где в байте не обязательно 8 бит.

anonymous
()

А вот и неправда ваша. Надо было повнимательнее пример прочитать. Правильно: b = (a >> CHAR_BIT) & UCHAR_MAX. Хотя я видел всего одну стстему, где char был 16 бит. То бишь на абсолютном большинстве систем и b = (a >> 8) & 0xff проканает. Хотя так, как написано в первом письме этого треда писать ни в коем случае низзя. И linux тут просто ни при чём. Он как на little endian железе работает, так и на big endian. На ogr вы ксати зря наезжаете - hton и ntoh - это на самом деле host-независимое решение.

anonymous
()

   А  вот  и  неправда  ваша.  Надо было повнимательнее пример прочитать.
   Правильно:  b  =  (a >> CHAR_BIT) & UCHAR_MAX. Хотя я видел всего одну
Хм, да, пример я не читал ( и при ответе думал что нумерация байтов идет с 1).
   dian.  На ogr вы ксати зря наезжаете - hton и ntoh - это на самом деле
   host-независимое решение.
Только они на порядки медленнее чем сдвиг + маска, даже если они inlined -
так как надо хранить то, что они возвращают, в памяти.

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

Ага. А 86-я платформа давно стала стандартом дря серверов. А жигули - стандартом в атоммобилестроении

gennik
()

2anonymous (15.11.46)
Озвучиваем девиз линукса? Глючнее, кривее, зато быстрее.
Ну на несколько десяток тактов медленнее будет.
И? А с сдвиг-маской все хорошо, но не так наглядно..

anonymous
()

>   Озвучиваем девиз линукса? Глючнее, кривее, зато быстрее.
Нет, девиз умных людей, которые понимают, что 2+2+2+2 тоже самое что 2*4
- короче, проще и нагляднее И ТАКЖЕ НАДЕЖНО.

anonymous
()

В добавок: и к тому же подход будет работать для 64-битных чисел,
тогда как через htno просто невозможно будет узнать скажем 6-ой байт.
Да, идиотам это непонятно интуитивно. Таким программистами не бывать.
Каждая кухарка код понимать не обязана.

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

Дык само желание "вытащить 1й байт из int-а" - в корне неверно. Если таковой вариант использования объекта типа int возможен, то это уже не int, а что-то совершенно иное. Жаль, что оголтелые Цэшники этого не в состоянии понять, иначе гораздо проще было бы переносить софт на железки, которым, к примеру, не по барабану выравнивание.

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

А анонимный "спец" понимает, что это будет именно ПЕРВЫЙ байт, а никак не МЛАДШИЙ?

Antichrist
()

Мда, я так понял анонимусы не поняли что такое BE и LE... И почему меня это не удивляет?

Ogr
()

2gennik

>Ага. А 86-я платформа давно стала стандартом дря серверов.

К сожалению да:((

Я ужаснулся, когда где-то (на SAP, наверное) увидел долю инсталяций SAP R/3 на MS SQL. Как нетрудно догадаться, работают они не на альфах:(( Ну особо продвинутые могут их под Linux перевести, ну на SAP DB, если за Oracle платить не хотят, но опять же x86.

ROR

anonymous
()

Добрые IBM, с наилучшими пожеланиями к злым Санам :)
А если дело обстоит так, что сан "кинул" с солярой под х86, то что бедному девелоперу делать? :) Плально, читать прокламации от IBM... :) Ща бы AIX под х86 :):D

asoneofus
()

2asoneofus: AIX for x86 не будет - будет статья о портировании из линукса в AIX...;)
Кстати про AIX for x86 это правда, не будет такого, а вот под IH-64 вроде грозились сделать...

Irsi
()

Сегодня когда ехал на работу обратил внимание на одну рекламу которую крутили по радио - раньше она звучала примерно как:
"Где бы мне купить сервер да так чтоб на нем Линукс ставился сборщиком... Ну и за одно чтоб они могли предложит Виндовс и ФриБСД"
Так вот реклама этой же самой конторы и голоса рекламщиков те же, вот только текст теперь -
"Где бы мне купить сервер с ФриБСД... Ну и за одно чтоб они могли предложит Виндовс и Линукс"
Чего это они поменяли фразу?

Ogr
()

2Ogr: угу... компулинк по требованиям пользователей к своим компам с ASPLinux теперь прикладывает инструкцию как удалить его и поставить винды...:)
Ответ манагеров из компулинка на вопрос зачем же они тогда стали продавать компы под линуксом был однозначен: ну во-первых это модно, это тиичный рекламно-пиарный звон, а во-вторых проще продавать комп с линуксом чем "голый" комп, ибо при продаже голого компа возникают тупые вопросы, подозрения и провокации... А многие хотят купить именно голый комп, без ОС и не платить за лицензию...
К слову - продавать комп с линуксом выгодней чем голый комп, ибо все думаю что линукс бесплатен, а на деле с юзера все равно сдираются деньги...:)

Irsi
()

"К слову - продавать комп с линуксом выгодней чем голый комп, ибо все думаю что линукс бесплатен, а на деле с юзера все равно сдираются деньги...:)"
Я даже о таком способе сдирания денег даже как-то и не подумал. Действительно на линуксе можно заработать :)

Ogr
()

2Ogr: прошу заметить что в полном соответствии с лицензией можно купить ОДИН дистрибутив и устанавливать его на МНОГО компов... При этом даже прибавка к стоимости 10$ (реально прибавляют 40-60$) с одной стороны практически незаметеа в цене нотебяка с одной стороны, с другой стороны - дает неплохой доп. навар :)

Irsi
()

пилять спамеры



Значит пример вытаскивания первого байта весьма дурацкий )
но вот htons как шас смотрю имеет unsigned long int
а мне передать надо long long int, как насчет LE & BE ))
???

PS:просьба спамарем изыди а, нелюбителей С идите писать туда где авше
любимое !

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

>2asoneofus: AIX for x86 не будет - будет статья о портировании из линукса в AIX...;)
>Кстати про AIX for x86 это правда, не будет такого, а вот под IH-64 вроде грозились сделать...
>Irsi (*) (2002-03-08 02:46:26.0)

Почему будет? Уже есть : Linux developers to AIX Howto :)
Давно (года два назад) базар активный шёл, к сожалению рассылки той не осталось, речь шла в аккурат о порте AIX-а даже чего-то можно было качнуть.. :) Типа демки или чегото в этом роде... Вот о IA-32 или IA-64 ????? А вообщето логично: AIX 64р.

Насчёт впруживания линукса, вот с Тинкпадом шёл РХ - прелесть, 1) Установлен "весьма аккуратно", где нужно, даже "подлатан-подклеен" :):):) и с дистрибутивных дисков все ставятся "гладенько".... РХ - после регистрации, да и с ИБМ - целый год всё ОК дули... Цена, примерно $-100, по сравнению с виндой...

А не так
давно приятель приобрёл РоверБук, с линухом :):):):):):):):):):)
Там на самом буке - линух и не стоял, а с диска не ставился :):):):)
Вот "крутой сервис"... Пускай затолкают себе его вместе... (дальше в курсе).

Антихрист, АУ! :) Мне с самсунга ордер сэмплес-ы выслали :) Альфу со всей приблудой :):):) Alpha 21264 + AMD751.... Посмотрим что за звери....


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

>2asoneofus: AIX for x86 не будет - будет статья о портировании из линукса в AIX...;)
>Кстати про AIX for x86 это правда, не будет такого, а вот под IH-64 вроде грозились сделать...
>Irsi (*) (2002-03-08 02:46:26.0)

Почему будет? Уже есть : Linux developers to AIX Howto :)
Давно (года два назад) базар активный шёл, к сожалению рассылки той не осталось, речь шла в аккурат о порте AIX-а даже чего-то можно было качнуть.. :) Типа демки или чегото в этом роде... Вот о IA-32 или IA-64 ????? А вообщето логично: AIX 64р.

Насчёт впруживания линукса, вот с Тинкпадом шёл РХ - прелесть, 1) Установлен "весьма аккуратно", где нужно, даже "подлатан-подклеен" :):):) и с дистрибутивных дисков все ставятся "гладенько".... РХ - после регистрации, да и с ИБМ - целый год всё ОК дули... Цена, примерно $-100, по сравнению с виндой...

А не так
давно приятель приобрёл РоверБук, с линухом :):):):):):):):):):)
Там на самом буке - линух и не стоял, а с диска не ставился :):):):)
Вот "крутой сервис"... Пускай затолкают себе его вместе... (дальше в курсе).

Антихрист, АУ! :) Мне от СамЗасунга (с Самвысунгом) удалось выцарапать ордер сэмплес-ы :) Альфу со всей приблудой :):):) Alpha 21264A-600(EV67) + AMD751.... Посмотрим что за звери....


asoneofus
()

2Aleks IZA: "но вот htons как шас смотрю имеет unsigned long int" Ты будешь смеятся, но htons работает с unsigned short и ни как с long, не говоря уж о том, что правильное описание для htons был бы "преобразования 16 битного", а что такое long long int на платформе X я не в курсе, это сколько бит?

Ogr
()

2 asoneofus:

А я вот пару лет назад приобрел Multia на Альфе... Разочарован... И дело не в производительности, к этому я был готов, а в маразме дековских инженеров. Это же надо додуматься - слабенькая машинка перегревается до зависонов или хуже - до апгрейда. Ну, конечно, кулер поменял на более мощный сразу, но осталось одно мнение PC под Intel куда как лучше. И, кстати, именно после этого решил, что брать ES или что-то подобное не буду. Такие вот дела...

Bluesman

anonymous
()

У меня несколько иные задачи, но про дековскую технику "периода заката" наслышан... :) Сейчас попробую - и решу, стоит ли во встраиваемых фенечках, менять 4 МИПСа на 1 альфу :):):) (по цене, где-то так получается)...

asoneofus
()

Я бы наоборот хотел с машиной на MIPS'е поиграться :) Кстати, а кто кроме SGI и SPX на MIPS'ах компы делает(делал)? Только не пда.

Bluesman

anonymous
()
Ответ на: пилять спамеры от Aleks_IZA

Ты, умник, ответь сначала на простой вопрос: ЗАЧЕМ может потребоваться извлечение ПЕРВОГО байта из int-а? Я понимаю, когда надо извлечь младший байт, но чтоб именно первый - не представляю такой задачи. А вот на головушку больные "любители C" - представляют.

Кстати, крутой суперпуперпрограммер, хошь, объясню тебе, почему ты любитель Цэ? Да по одной простой причине - глуп ты и безграмотен, ты даже Цэ свой якобы любимый не знаешь. Так что не тебе его и защищать. Впилил?

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

Так блин, эта самая Multia всеми поругаема неоднократно, и за Альфу её не считают даже. И это не удивительно - всё же, в семье не без урода...

Antichrist
()

Антихр, типа, за пятки всех покусал :):)
Типа, не докурил чтоль? Или снова "с будуна"?

Антик, не думаю, что сони плай - на альфах ... (типа, серьёзно)

2Bluesman
Я про МИПС х64 мало знаю... Больше про х32, но думаю, за исключением местных самопалов, больше никто...

asoneofus

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

Нет, баклан, это ты обкурился. Какие на хрен Альфы, когда я про MIPS отвечал? PS и PS2 как раз на MIPS-ах сделаны.

Antichrist
()

Если под умником подразумеваете меня (я тот который, про CHAR_BIT написал), то я действительно не понимаю, зачем может понадобиться первый (не младший) бит от int. Но ведь это же идея IBM, а не моя, верно ? ;-) Я всего лишь написал тут переносимый код для этого. Что касабельно long long - ну так скажите мне, много ли для этих костылей posix (к примеру) функций ? Тянете в рот всякую гадость, а потом обижаетесь, что у вас запор ;-) По поводу MIPS - если вы в раше, можете попробовать купить какой-нибудь старый RM200 от Siemens Nixdorf. Если в бундесе, то просто идите на свалку и подберите ;-) Они как раз на MIPS построены. Заодно с Relian UNIX познакомитесь (фу, гадость какая ;-)

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