IBM developerWorks опубликовала статью - руководство по портированию
приложений на C/C++ с Solaris на Linux. В статье расмотрены
различия в системных типах, библиотеках и окружении.
2anonymous (*) (2002-03-07 07:48:50.0): "Хм а пример правильного преобразования(вытаскивания 1-го байта из int) работающий в LE и BE можно привести ?"
Только с начала нужно выяснить, что подразумевается под int - нечто длинной в 16, 32 или 64 байта...
В качестве переносимой метода можно восполбзоватся функциями вроде htons
гы, помню как в светлое начало 90-х все производители юниксов обещали, что программф на Си можно будет скомпилить на любом юниксе с минимальными переделками, зависящими от камня :-) А щас чё наделали.. Эх, ничему на слово верить нельзя:-)
Так ведь Linux уже давно стал стандартом в области Unix. Куда ни ткнешь, Tested Platforms: Linux на первом месте.
А чтобы найти Sparc машинку и проверить configure, надо сильно постараться.
Соответственно, имея Linux, ты почти не будешь иметь проблем с совместимостью, ибо кто-нибудь да протестировал программу под ним. А вот за портирование на другие платформы придется отвечать самому, раз такой худой.
Причем здесь Linux и не Linux?
Писать надо переносимо, а не ориентироваться на аппаратные или иные
характеристики платформы.
Это было проверено еще в конце 70-х, начале 80-х, разработчики уже
наступали на эти грабли.
Были программы переносимые - за 1 час или 1 день перетащить можно было:
вся зависимость - библиотеки, работа с терминальными линиями
(BSD/AT&T).
А были не переносимые - те переносились за недели или месяцы.
Сейчас одновременно и сложнее и проще.
Сложнее - более менее сложная программа это надстройка над кучей библиотек.
Проще - эти библиотеки зачастую уже портированны.
Так что новое - это хорошо забытое старое ;-)
Мы это уже проходили - переход с int16 -> int32, портирование с
BSD like на AT&T like и обратно.
И если для кого-то это стало открытием - то только подтверждает комунистический тезис о спиральности развития ;-)
Сами 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]... и т.д. Короче, вам этот мусор интересен? Мне -- нет.
А самое удивительное (кто-нть обратил внимание ?), что документ, описывающий портирование с продукта Sun на Linux родился в компании, не имеющей к ним вобщем-то никакого отношения :-)
Это сейчас модно так делать ?
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 бит.
А вот и неправда ваша. Надо было повнимательнее пример
прочитать. Правильно: b = (a >> CHAR_BIT) & UCHAR_MAX.
Хотя я видел всего одну стстему, где char был 16 бит.
То бишь на абсолютном большинстве систем и b = (a >> 8) & 0xff
проканает. Хотя так, как написано в первом письме этого
треда писать ни в коем случае низзя. И linux тут просто ни
при чём. Он как на little endian железе работает, так и на big
endian. На ogr вы ксати зря наезжаете - hton и ntoh - это на
самом деле host-независимое решение.
А вот и неправда ваша. Надо было повнимательнее пример прочитать.
Правильно: b = (a >> CHAR_BIT) & UCHAR_MAX. Хотя я видел всего одну
Хм, да, пример я не читал ( и при ответе думал что нумерация байтов идет с 1).
dian. На ogr вы ксати зря наезжаете - hton и ntoh - это на самом деле
host-независимое решение.
Только они на порядки медленнее чем сдвиг + маска, даже если они inlined -
так как надо хранить то, что они возвращают, в памяти.
2anonymous (15.11.46)
Озвучиваем девиз линукса? Глючнее, кривее, зато быстрее.
Ну на несколько десяток тактов медленнее будет.
И? А с сдвиг-маской все хорошо, но не так наглядно..
> Озвучиваем девиз линукса? Глючнее, кривее, зато быстрее.
Нет, девиз умных людей, которые понимают, что 2+2+2+2 тоже самое что 2*4
- короче, проще и нагляднее И ТАКЖЕ НАДЕЖНО.
В добавок: и к тому же подход будет работать для 64-битных чисел,
тогда как через htno просто невозможно будет узнать скажем 6-ой байт.
Да, идиотам это непонятно интуитивно. Таким программистами не бывать.
Каждая кухарка код понимать не обязана.
Дык само желание "вытащить 1й байт из int-а" - в корне неверно. Если таковой вариант использования объекта типа int возможен, то это уже не int, а что-то совершенно иное. Жаль, что оголтелые Цэшники этого не в состоянии понять, иначе гораздо проще было бы переносить софт на железки, которым, к примеру, не по барабану выравнивание.
>Ага. А 86-я платформа давно стала стандартом дря серверов.
К сожалению да:((
Я ужаснулся, когда где-то (на SAP, наверное) увидел долю инсталяций SAP R/3 на MS SQL. Как нетрудно догадаться, работают они не на альфах:(( Ну особо продвинутые могут их под Linux перевести, ну на SAP DB, если за Oracle платить не хотят, но опять же x86.
Добрые IBM, с наилучшими пожеланиями к злым Санам :)
А если дело обстоит так, что сан "кинул" с солярой под х86, то что бедному девелоперу делать? :) Плально, читать прокламации от IBM... :) Ща бы AIX под х86 :):D
2asoneofus: AIX for x86 не будет - будет статья о портировании из линукса в AIX...;)
Кстати про AIX for x86 это правда, не будет такого, а вот под IH-64 вроде грозились сделать...
Сегодня когда ехал на работу обратил внимание на одну рекламу которую крутили по радио - раньше она звучала примерно как:
"Где бы мне купить сервер да так чтоб на нем Линукс ставился сборщиком... Ну и за одно чтоб они могли предложит Виндовс и ФриБСД"
Так вот реклама этой же самой конторы и голоса рекламщиков те же, вот только текст теперь -
"Где бы мне купить сервер с ФриБСД... Ну и за одно чтоб они могли предложит Виндовс и Линукс"
Чего это они поменяли фразу?
2Ogr: угу... компулинк по требованиям пользователей к своим компам с ASPLinux теперь прикладывает инструкцию как удалить его и поставить винды...:)
Ответ манагеров из компулинка на вопрос зачем же они тогда стали продавать компы под линуксом был однозначен: ну во-первых это модно, это тиичный рекламно-пиарный звон, а во-вторых проще продавать комп с линуксом чем "голый" комп, ибо при продаже голого компа возникают тупые вопросы, подозрения и провокации... А многие хотят купить именно голый комп, без ОС и не платить за лицензию...
К слову - продавать комп с линуксом выгодней чем голый комп, ибо все думаю что линукс бесплатен, а на деле с юзера все равно сдираются деньги...:)
"К слову - продавать комп с линуксом выгодней чем голый комп, ибо все думаю что линукс бесплатен, а на деле с юзера все равно сдираются деньги...:)"
Я даже о таком способе сдирания денег даже как-то и не подумал. Действительно на линуксе можно заработать :)
2Ogr: прошу заметить что в полном соответствии с лицензией можно купить ОДИН дистрибутив и устанавливать его на МНОГО компов... При этом даже прибавка к стоимости 10$ (реально прибавляют 40-60$) с одной стороны практически незаметеа в цене нотебяка с одной стороны, с другой стороны - дает неплохой доп. навар :)
Значит пример вытаскивания первого байта весьма дурацкий )
но вот htons как шас смотрю имеет unsigned long int
а мне передать надо long long int, как насчет LE & BE ))
???
PS:просьба спамарем изыди а, нелюбителей С идите писать туда где авше
любимое !
>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.... Посмотрим что за звери....
>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.... Посмотрим что за звери....
2Aleks IZA: "но вот htons как шас смотрю имеет unsigned long int"
Ты будешь смеятся, но htons работает с unsigned short и ни как с long, не говоря уж о том, что правильное описание для htons был бы "преобразования 16 битного", а что такое long long int на платформе X я не в курсе, это сколько бит?
А я вот пару лет назад приобрел Multia на Альфе... Разочарован... И дело не в производительности, к этому я был готов, а в маразме дековских инженеров. Это же надо додуматься - слабенькая машинка перегревается до зависонов или хуже - до апгрейда. Ну, конечно, кулер поменял на более мощный сразу, но осталось одно мнение PC под Intel куда как лучше. И, кстати, именно после этого решил, что брать ES или что-то подобное не буду. Такие вот дела...
У меня несколько иные задачи, но про дековскую технику "периода заката" наслышан... :) Сейчас попробую - и решу, стоит ли во встраиваемых фенечках, менять 4 МИПСа на 1 альфу :):):) (по цене, где-то так получается)...
Ты, умник, ответь сначала на простой вопрос: ЗАЧЕМ может потребоваться извлечение ПЕРВОГО байта из int-а? Я понимаю, когда надо извлечь младший байт, но чтоб именно первый - не представляю такой задачи. А вот на головушку больные "любители C" - представляют.
Кстати, крутой суперпуперпрограммер, хошь, объясню тебе, почему ты любитель Цэ? Да по одной простой причине - глуп ты и безграмотен, ты даже Цэ свой якобы любимый не знаешь. Так что не тебе его и защищать. Впилил?
Если под умником подразумеваете меня (я тот который, про CHAR_BIT
написал), то я действительно не понимаю, зачем может понадобиться
первый (не младший) бит от int. Но ведь это же идея IBM, а не моя,
верно ? ;-) Я всего лишь написал тут переносимый код для этого.
Что касабельно long long - ну так скажите мне,
много ли для этих костылей posix (к примеру) функций ? Тянете
в рот всякую гадость, а потом обижаетесь, что у вас запор ;-)
По поводу MIPS - если вы в раше, можете попробовать купить
какой-нибудь старый RM200 от Siemens Nixdorf. Если в бундесе,
то просто идите на свалку и подберите ;-) Они как раз на
MIPS построены. Заодно с Relian UNIX познакомитесь (фу, гадость
какая ;-)