この人頭いいなと思ったエピソード

C言語で開発されたプログラムをHP-UXからLinuxへのポーティングする場合、どのように行えば効率的でしょうか?
また、注意する内容があれば教えて頂けないでしょうか?

ポーティング前のOSはHP-UX(詳細不明)
ポーティング後のOSはRedHat Enterprise Linux 5.5 (64bit)
C言語で開発されたプログラムは、ソケット通信でサーバ間通信を行う機能となります

A 回答 (2件)

unix系(linux含む)でポーティングの際におもに注意すべき点は以下の3つです。


1.OS固有の問題
2.32ビット版と64ビット版との違い
3.エンディアンの違い(ビッグエンディアンとリトルエンディアン)
今回は、どちらも64ビットなので、2については考慮しません。
1についてですが、
私がHP-UXからsolarisへ移植したときに、シグナルの動作が異なるときが
ありました。今回もし、シグナルを使用しているようでしたら、動作が
多少異なる覚悟をしておいたほうがよいかと思います。
また、IPC(セマフォ、メッセージキュー、共有メモリ)を使う場合、
共有メモリは、多少調整を行った記憶があります。
(hp-ux=>solaris=>linuxの移植で、hp-ux=>solarisはOK、
solaris=>linuxで多少の調整が必要でした)
結論としては、もしシグナルおよびIPCを使う場合、100%そのまま使用可能とは
考えないほうが良いです。
2についてですが、
HP-UXはビッグエンディアンのCPU(sunのsparc系など)であり、
red-hatはリトルエンディアン(intel系)のCPUになります。
このため、受信した電文がバイナリデータの場合、そのデータの中身を見るのであれば、
ビッグエンディアンからリトルエンディアンへの変換が必要になります。
データの中身は一切参照しないか、文字データなら変換の必要はありません。
また、IPアドレスおよびポート番号などは
htonl,htonsなどにより適切なエンディアンにする必要があります。
(HP-UXはビッグエンディアンなのでこのような操作(エンディアン変換)をしなくても正しく動作しますが、red-hatに移植すると動作しなくなる可能性があります。)
エンディアンの問題はソケット通信のプログラムだけでなく、そのデータを使用するほかのプログラムにも影響します。
エンディアンの問題は非常に重要ですので、もし、エンディアンについての知識が浅い場合は、
ネットで調査および自分で簡単なテストプログラムを作成し、十分に理解されることをお勧めします。

参考URL:http://www.katto.comm.waseda.ac.jp/~katto/Class/ …
    • good
    • 0
この回答へのお礼

大変役立ちました。本当にありがとうございます。

お礼日時:2011/01/27 13:25

補足要求


1.HP-UXで開発したプログラムは32ビット版でしょうか、それとも64ビット版でしょうか?
2.Red-HatはOSが64ビットですが、今回開発対象となるプログラムは64ビット版でしょうか、それとも32ビット版でしょうか?

この回答への補足

HP-UXで開発されたプログラムは64ビット版です。Red-Hatで開発するのも64ビット版となります。
よろしくお願いいたします。

補足日時:2011/01/27 10:25
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報