こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Sun OS(WS)向けプログラムをPC-Linux環境に移植する手間について

ワークステーション上のSun-OS向けに開発されたC言語で開発されたソフトウエアをPC-Linux上に移植したい場合、どのような改修が必要になるでしょうか?
基本的にはLinuxクローンなので、かなりそのままでも動きそうな気がするのですが。

システムコールなどでワークステーション特有とかSun-OS特有なものってあるのでしょうか?
両方とも多少開発経験があるのですが、あまりシステムコールを多用してなかったものでよくわかりません。(特にPC-Linux側)

わかる方がいましたらご回答願います。

投稿日時 - 2003-08-06 18:29:38

QNo.621359

困ってます

質問者が選んだベストアンサー

はまる可能性としては、

関数へ渡す値をポインタで渡す場合、
バイナリファイルを読み書きする場合、
メモリ参照をしている場合
などなど、いろいろ考えられます。

また、ネットワークプログラミングでも注意が必要です。
ネットワークプログラミングでは、エンディアンの違いを吸収する
関数が用意されています。
(INETプロトコルにおけるネットワークバイトオーダは、ビッグエンディアン
に統一されています。)

ソケット構造体にポート番号を設定する場合、

addr.sin_port = 3000;

とはしないで、

addr.sin_port = htons(3000);

と指定します。
これで、各アーキテクチャのコンパイラが自動的にエンディアン
の違いを吸収してくれます。

投稿日時 - 2003-08-07 20:22:45

お礼

具体的な解説ありがとうございます。
参考にさせていただきたいと思います。

投稿日時 - 2003-08-09 21:45:31

ANo.2

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

逆の経験ですが,Windowsの計測システムで取得されたbinaryのデータファイルを読むのに,endianの変換が必要でした.

要は,ネットワーク経由にせよ何にせよ,endian の異なるシステム間でデータのやりとりをする場合には要注意ということだと思います.
言うまでもありませんが,元々のシステムが,endianに依存しないように書かれていれば(本来そうすべき)問題は起きません.

endian 以外ではまりそうなのは int の長さとかですかね?
これもシステム非依存に書くべきものではあります.

投稿日時 - 2003-08-08 00:25:24

お礼

ありがとうございます。
今現在は開発の仕事ではないのですが、かつては両システムで開発をしたことがあります。しかしながら「エンディアン」や「intの長さ」が影響するような移植などの経験はありませんでした。逆に言うと既存のシステム側にそういった移植性まで考慮している可能性はないと思って見る必要があるかもしれませんね。(もしちゃんと配慮されていたら自分たちが開発者として甘かったということで素直に反省します。)

投稿日時 - 2003-08-09 21:50:32

ANo.1

xjd

>PC-Linux上に移植したい場合、どのような改修が必要になるでしょうか?

ビッグエンディアン・リトルエンディアンの違いを考慮する必要はあります。

投稿日時 - 2003-08-06 20:06:43

お礼

メモリ上へのデータ格納方式の違いがありうるということですね。これはプログラム上でメモリ参照をしている場合に問題が発生しうるということでしょうか?
これが原因で具体的に問題になった例などがございましたら教えていただけないでしょうか?
自分でもちょっと調べてみます、ありがとうございました。

投稿日時 - 2003-08-07 18:11:51

あなたにオススメの質問