• ベストアンサー

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

ワークステーション上のSun-OS向けに開発されたC言語で開発されたソフトウエアをPC-Linux上に移植したい場合、どのような改修が必要になるでしょうか? 基本的にはLinuxクローンなので、かなりそのままでも動きそうな気がするのですが。 システムコールなどでワークステーション特有とかSun-OS特有なものってあるのでしょうか? 両方とも多少開発経験があるのですが、あまりシステムコールを多用してなかったものでよくわかりません。(特にPC-Linux側) わかる方がいましたらご回答願います。

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

  • ベストアンサー
  • xjd
  • ベストアンサー率63% (1021/1612)
回答No.2

はまる可能性としては、 関数へ渡す値をポインタで渡す場合、 バイナリファイルを読み書きする場合、 メモリ参照をしている場合 などなど、いろいろ考えられます。 また、ネットワークプログラミングでも注意が必要です。 ネットワークプログラミングでは、エンディアンの違いを吸収する 関数が用意されています。 (INETプロトコルにおけるネットワークバイトオーダは、ビッグエンディアン に統一されています。) ソケット構造体にポート番号を設定する場合、 addr.sin_port = 3000; とはしないで、 addr.sin_port = htons(3000); と指定します。 これで、各アーキテクチャのコンパイラが自動的にエンディアン の違いを吸収してくれます。

Yupa3
質問者

お礼

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

その他の回答 (2)

  • astronaut
  • ベストアンサー率58% (303/516)
回答No.3

逆の経験ですが,Windowsの計測システムで取得されたbinaryのデータファイルを読むのに,endianの変換が必要でした. 要は,ネットワーク経由にせよ何にせよ,endian の異なるシステム間でデータのやりとりをする場合には要注意ということだと思います. 言うまでもありませんが,元々のシステムが,endianに依存しないように書かれていれば(本来そうすべき)問題は起きません. endian 以外ではまりそうなのは int の長さとかですかね? これもシステム非依存に書くべきものではあります.

Yupa3
質問者

お礼

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

  • xjd
  • ベストアンサー率63% (1021/1612)
回答No.1

>PC-Linux上に移植したい場合、どのような改修が必要になるでしょうか? ビッグエンディアン・リトルエンディアンの違いを考慮する必要はあります。

Yupa3
質問者

お礼

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

関連するQ&A