• ベストアンサー

C言語のHP-UXからLinuxへのポーティング

C言語で開発されたプログラムをHP-UXからLinuxへのポーティングする場合、どのように行えば効率的でしょうか? また、注意する内容があれば教えて頂けないでしょうか? ポーティング前のOSはHP-UX(詳細不明) ポーティング後のOSはRedHat Enterprise Linux 5.5 (64bit) C言語で開発されたプログラムは、ソケット通信でサーバ間通信を行う機能となります

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

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.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/GazoTokuron/code/socket.html
jzj03074
質問者

お礼

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

その他の回答 (1)

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.1

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

jzj03074
質問者

補足

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

関連するQ&A