Solaris 移行ガイド

第 16 章 ツールと資源

この章では、開発環境におけるツールと資源の変更について説明します。この章の内容は次のとおりです。

ioctl() 要求

dkio(7I)filiomtio(7I)sockio(7I)streamio(7I)termio(7I)termios(7I) に関連するすべての ioctl は、Solaris 7 でサポートされます。

SunOS 4.x の termios 構造体と Solaris 7 の termios 構造体との間に、互換性のない部分がいくつかあります。例えば SunOS 4.x の termios 構造体にはある c_line フィールドが、Solaris 7 には含まれていません。

<sys/ttold.h> に定義がある次の ioctl は、実装されていません。

次の ttycom ioctl 要求は Solaris 7 にはありません。

Solaris 7 でサポートされる ioctl()表 16-1 に示します。

表 16-1 ioctl() のサポート

ioctl()

説明 

DKIOCGPART

これらの要求は、Solaris 7 では DKIOCGAPARTDKIOCSAPART に置き換えられる。

DKIOCGCONF

この要求は、Solaris 7 では、SunOS 4.x の DKIOCGCONFDKIOCINFO 構造体の情報を合わせたものが含まれる DKIOCINFOに置き換えられる。

DKIOCSCMD

この要求は、IPI ドライブに対してのみ正常に実行される。この ioctl は、SCSI デバイスでは異常終了する。SCSI デバイスに対しては、USCSI ioctl を使用する。

DKIOCGLOG

EINVAL が戻される。DKIOCWCHK コマンドは、フロッピーデバイスに対する書き込みチェックを切り換える。

filio

次の filio ioctl 要求は、Solaris 7 または SVR4 ではサポートされていない: FIOSETOWNFIOGETOWNFIOCLEXFIONCLEXfilioioctl 要求は ABI または SVID では、定義されていない。

mtio

Solaris 7 では mtio ioctl 要求のすべてをサポートしていないデバイスもある。マニュアルページの mtio(7) を参照のこと。

sockio

次の sockio ioctl 要求は、SVR4 と Solaris 7 において実装されている:SIOCSPGRP, SIOCGPGRPSIOCATMARKsockio ioctl 要求は ABI または SVID では、定義されていない。

streamio

すべての SunOS 4.x の streamio ioctl 要求は、Solaris 7、ABI、SVID、および SVR4 に実装されている。I_FDINSERT 要求は、strfdinsert 構造体を指す引数が必要となる。SunOS 4.x の strfdinsert 構造体は fd (int) フィールドを含むが、ABI、SVID、または SVR4 strfdinsert 構造体は fildes (int) フィールドを含む。

audioio

SunOS 4.x の <sun/audioio.h> ファイルは、Solaris 7 では <sys/audioio.h> に移動されている。さらに、Solaris 7 では、インタフェースの機能が強化されている。詳細については、audio(7)audioamd(7)dbri(7) マニュアルページを参照のこと。

termio, termios

すべての SunOS 4.x の termio、および termios ioctl 要求は、Solaris 7、ABI、SVID、および SVR4 に実装される。SunOS 4.x termios 構造体と Solaris 7 、あるいは ABI、SVID、または SVR4 termios 構造体との間には一部互換性がない。SunOS 4.x の termios構造体には、c_line フィールドがある。c_cflag (端末のハードウェア制御) の内容は SunOS 4.x ソフトウェアでは CRTSCTS (RTS/CTS フロー制御を有効にする) が可能だが、この値は Solaris 7 リリース、ABI、SVID、または SVR4 には定義がない。しかし、機能性は termiox(7) インタフェースを通してサポートされる。

ptrace() 要求値

ptrace() 機能は /proc の先頭に実装されています。新しいアプリケーションは直接 proc(4) を使用してください。

Solaris 7 では、ptrace() ルーチンは BCP モードで実行するアプリケーションをサポートするために単独で存在します。ptrace() ルーチンは要求値として整数 1〜9 を使用しますが、SunOS 4.x ルーチンは <sys/ptrace.h> で要求値をシンボリック定数として定義します。次のシンボリック定数は、Solaris 7 と互換性があります。

SunOS 4.x の PTRACE_CONT addr 引数は、中断しているプロセスが実行を再開すべき場所を指定します。ただし、プロセスが中断したところから実行が再開する addr = 1 の場合は除きます。Solaris 7 は、addr が常に 1 に等しく、実行が常にプロセスが中断したところから再開することを要求します。また、データによって指定されたものを除いたすべてのペンディングシグナルをキャンセルします。SunOS 4.x の PTRACE_CONT は、ペンディングシグナルをすべてキャンセルするとは限りません。

表 16-2 に示す SunOS 4.x の有効な要求は、 Solaris 7 ptrace() ルーチンではサポートされません。

表 16-2 Solaris 7 でサポートされていない ptrace() 要求

PTRACE_ATTACH

PTRACE_GETWINDOW

PTRACE_DETACH

PTRACE_SETWINDOW

PTRACE_GETREGS

PTRACE_22

PTRACE_SETREGS

PTRACE_23

PTRACE_GETFPREGS

PTRACE_26

PTRACE_SETFPREGS

PTRACE_27

PTRACE_READDATA

PTRACE_28

PTRACE_WRITEDATA

PTRACE_SYSCALL

PTRACE_READTEXT

PTRACE_DUMPCORE

PTRACE_WRITETEXT

PTRACE_SETWRBKPT

PTRACE_GETFPAREGS

PTRACE_SETACBKPT

PTRACE_SETFPAREGS

PTRACE_CLRDR7

ライブラリ

Solaris 7 は、System V Inrerface Definition, Third Edition (SVID 3) に準拠しています。SunOS 4.1 System V ライブラリとともに書かれたプログラムは Solaris 7 への移植が簡単ですが、SunOS 4.x BSD C ライブラリを使用するプログラムにとっては多くの労力を必要とします。

再編成ライブラリ

機能や機能グループの中には、Solaris 7 では別のライブラリに移動されたものがあります。このため、SunOS 4.x のアプリケーションを Solaris 7 でコンパイルする時に、これらの移動された機能を参照することで未定義とフラグされる可能性があります。

コンパイルした後、未定義とフラグされた任意の機能のマニュアルページを確認してください。機能説明のところに、-l リンカーオプションと、シンボルを解決する必要のある任意のインクルードファイルの両方がリストされます。

共用ライブラリ

共用ライブラリは現在、マイナーバージョン番号をサポートしません。

共用初期設定データファイル (.sa) はすでに不要となっており、.sa ファイルは Solaris 7 では提供されません。

資源の制限

Solaris 7 での資源の制限は大きく異なります。前リリースでは、静的テーブルの割り当てがファイル記述子やアクティブなプロセスなどの資源に使用されました。これらの資源は、現在は動的に割り当てられます。つまり、空いている物理メモリによって制限されることを意味します。表 16-3 に資源の制限を示します。

表 16-3 資源の制限

構成 

制限 

RLIMIT_CORE

プロセスによって作成できるコアファイルの最大サイズ (バイト単位) 

RLIMIT_CPU

プロセスが使用できる最大 CPU タイム (秒単位) 

RLIMIT_DATA

プロセスのヒープの最大サイズ (バイト単位) 

RLIMIT_FSIZE

プロセスによって作成できるファイルの最大サイズ (バイト単位) 

RLIMIT_NOFILE

プロセスによって作成できるファイル記述子の最大数より 1 大きい値 

RLIMIT_VMEM

プロセスのマップされたアドレスサイズが増大できる最大サイズ (バイト単位) 

RLIMIT_STACK

プロセスのスタックの最大サイズ (バイト単位) 


注 -

ネットワークライブラリを必要とする共有オブジェクトはすべて動的にリンクしなければなりません。ネットワークライブラリは、libdl.so.1 を必要とし、アーカイブライブラリは利用できません。


表 16-4 に SunOS 4.x ライブラリと Solaris 7 ライブラリ、およびそれらの位置を示します。

表 16-4 ライブラリ位置の比較

ライブラリ名 

SunOS 4.x ディレクトリ 

Solaris 7 ディレクトリ 

libbsdmalloc.a

/usr/lib

/usr/lib

libc.a

/usr/lib および /usr/5lib

/usr/lib

libc.so.1.7

/usr/lib

/usr/lib

libc.so.2.7

/usr/5lib

/usr/lib

libc_p.a

/usr/5lib

なし 

libcurses.a

/usr/lib および /usr/5lib

/usr/ucblib および /usr/ccs/lib

libcurses_p.a

/usr/5lib

なし 

libdbm.a

/usr/lib

/usr/ucblib

libdl.so.1.0

/usr/lib

/usr/lib

libg.a

/usr/lib

なし 

libkvm.a

/usr/lib

なし  

libkvm.so.0.3

/usr/lib

/usr/lib

libl.a

/usr/lib

/usr/ccs/lib

libln.a

/usr/lib

なし 

liblwp.a

/usr/lib

なし 

libm.a

/usr/lib

/usr/lib および /usr/lib/libp

libmp.a

/usr/lib

/usr/lib

libnbio.a

/usr/lib

なし 

libnsl.a

/usr/lib

/usr/lib

libpixrect.a

/usr/lib

なし

libpixrect.so.2.14

/usr/lib

なし 

libposix.a

/usr/lib

なし 

libresolv.a

/usr/lib

/usr/lib

librpcsvc.a

/usr/lib

/usr/lib

libsuntool.so.0.54

/usr/lib

なし 

libsunwindow.so.0.55

/usr/lib

なし 

libsvidm.a

/usr/5lib

なし 

libsvidm_p.a

/usr/5lib

なし 

libtermcap.a

/usr/lib および

/usr/5lib

/usr/ucblib および /usr/ccs/lib

libtermlib.a

/usr/lib および

/usr/5lib

/usr/ccs/lib

libxgl.so.1.1

/usr/lib

/opt/SUNWits/

Graphics-sw/xgl/lib

libxpg.a

/usr/xpg2lib

なし 

liby.a

/usr/lib および

/usr/5lib

/usr/ccs/lib

make の使用

Solaris 7 で利用できる make ユーティリティは 2 種類あります。デフォルトである /usr/ccs/bin/make は、SunOS 4.x の make コマンドと同じです。SVR4 版は /usr/ccs/bin/make で利用できます。

デフォルトの make を使うと、Makefile を変更する必要はありません。ただし、Makefile で使用するコマンドのいくつかは変更されている可能性があります。たとえば、Makefile で一般に使用される install(1) は、オプションに変更が加えられたために次の例のように予期しない結果を生むことがあります。

/usr/ueb にある install(1B) のバージョンは SunOS 4.x のバージョンと互換性があります。

個々のインタフェースに関する情報については、付録 A 「コマンドリファレンス」 の互換性に関する表で確認してください。

SCCS の使用

Solaris 7 のソースコード管理システム (SCCS) は SunOS 4.x の SCCS とは少し異なっています。コマンドとサブコマンドの同じセットが両方の環境でサポートされています。SunOS 4.x システムで使用される SCCS ディレクトリおよび s.files は Solaris 7 システムでも同様に動作します。

SunOS 4.x ソフトウェアでは、SCCS コマンドは /usr/sccs ディレクトリに置かれていました。Solaris 7 ではこれらのコマンドは他のプログラミングツールとともに /usr/ccs/bin に置かれています。

SunOS 4.x と Solaris 7 ユーティリティの相違の 1 つに読み取り不可能な s.file の処理があります。SunOS 4.x コマンドは、読み取り不可能な s.file が出現すると、エラーを出力して続行します。Solaris 7 コマンドはエラーを無視します。

アプリケーション互換性の判断

バイナリ互換パッケージは開発環境としては提供されていませんが、将来のリリースとのバイナリ互換性を改善できる適切なプログラミングが必要です。

バイナリ互換パッケージは、部分的に静的にリンクされているかあるいは動的にリンクされているハイブリッドと同じく、動的または静的にリンクされたアプリケーションと互換性があります。

バイナリ互換パッケージは、「お行儀の良い」ユーザアプリケーションで使用することができます。「お行儀の良い」アプリケーションとは、次の条件を満たすアプリケーションを指します。

上記の条件を満たしていないと、アプリケーションは予想できない結果を生じることがあります。

バイナリ互換パッケージの使用方法に関する情報は、『バイナリ互換性ガイド』に説明があります。

アプリケーションパッケージ作成

Solaris 7 環境は現在パッケージという単位でバンドルされています。これらのパッケージには、システムに追加したり、システムから削除したりする必要があるファイルおよび情報のすべてが含まれます。

パッケージは次のようなコンポーネントで構成されます。

アドオンアプリケーションソフトウェアは、フロッピーディスク、テープ、または CD-ROM から Solaris 7 システムにインストールできるようにパッケージ化されていなければなりません。『Application Packaging Developer's Guide』では、パッケージを作成するためのガイドラインを記載しています。

パッケージ作成ユーティリティ

パッケージを作成し、操作するためのユーティリティがいくつか提供されます。 表 16-5 にパッケージの作成に便利なコマンドを示します。

表 16-5 パッケージ作成用コマンド

pkgproto

pkgmk コマンドへ入力するプロトタイプファイルのエントリを生成する

pkgmk

インストール可能なパッケージを生成する 

pkgtrans

パッケージフォーマットを変換する 

表 16-6 にパッケージの追加と削除に便利なコマンドを示します。

表 16-6 パッケージの追加と削除用コマンド

pkgadd

システムにソフトウェアパッケージを追加する 

pkgask

要求スクリプトに対する応答を格納する 

pkgrm

システムからパッケージを削除する 

pkgchk

インストールの結果をチェックする 

表 16-7 にパッケージに関する情報を提供するコマンドを示します。

表 16-7 Cパッケージに関する情報を提供するコマンド

pkginfo

インストール済みパッケージに関するソフトウェアパッケージ情報を表示する 

pkgparam

パッケージパラメータ値を表示する

ツールキット

この節では OPEN LOOK Intrinsic ToolKit (OLIT) と XView について説明します。

OLIT

OPEN LOOK Intrinsics Toolkit (OLIT) は Xt Intrinsics をベースにしています。このツールキットは多くのウィジェットセットに共通な関数セットを提供し、X 環境のユーザインタフェースコンポーネントを作成したり、流用したり、削除したりします。

XView

XView Window Toolkit は OPEN LOOK グラフィカルユーザインタフェース (GUI) 仕様を実装しています。

XView は varargs に基づく可変長の属性値リストを使用し、ウィンドウ、メニュー、およびスクロールバーなど、作成するオブジェクトを指定します。このツールキットでは、すでに通常の動作が定義されているため、手続き型プログラミングによくあるように定型のコードを繰り返す必要がありません。

SunOS 4.x ツールの検索

ほとんどの SunOS 4.x のプログラミングツールが利用でき、同じ機能を提供しますが、多くのものが新しい位置にあります。現在バンドルされるプログラミングツールはすべて 2 つのディレクトリ、/usr/ccs/bin/usr/ccs/lib にあります。 表 16-8 にプログラミングツールと SunOS 4.x の位置を示します。

表 16-8 バンドルされるプログラミングツール

SunOS 4.x コマンド 

SunOS 4.x での位置 

admin

/usr/sccs

ar

/usr/bin

as

/usr/bin

cdc

/usr/sccs

comb

/usr/sccs

cpp

/usr/lib/cpp

delta

/usr/sccs

error

/usr/ucb

get

/usr/sccs

help

/usr/sccs

ld

/usr/bin

lex

/usr/bin

lorder

/usr/bin

m4

/usr/bin

make

/usr/bin

nm

/usr/bin

prof

/usr/bin

prs

/usr/sccs

prt

/usr/sccs

ranlib

/usr/bin

rmdel

/usr/sccs

sact

/usr/sccs

sccs

/usr/ucb

sccsdiff

/usr/sccs

size

/usr/bin

strip

/usr/bin

symorder

/usr/ucb

tsort

/usr/bin

unget

/usr/sccs

unifdef

/usr/ucb

val

/usr/sccs

vc

/usr/old

what

/usr/sccs

yacc

/usr/bin

yaccpar

/usr/lib

表 16-9 に、新しい Solaris プログラミングツールとその説明を示します。

表 16-9 新しいプログラミングツール

新しいコマンド 

説明 

dis

COFF のオブジェクトコード逆アセンブラ  

dump

オブジェクトファイルの選択された部分をダンプする 

exstr

ソースファイルから文字列を抽出する 

mcs

オブジェクトファイルのコメントセクションを操作する 

regcmp

正規表現コンパイラ 

truss

システムコールとシグナルを追跡する 

ptools

多方面の /proc ユーティリティ

表 16-10 に、現在アンバンドル製品である SunOS 4.x コマンドを示します。

表 16-10 アンバンドル製品のプログラミングツール

アンバンドルのコマンド 

説明 

cb

簡単な C プログラム整形ツール 

cc

C コンパイラ 

cflow

プログラムにフローグラフを生成する 

cscope

対話方式で C プログラムを検査する 

ctrace

C プログラム実行追跡を行う 

cxref

C プログラムクロスリファレンスを行う 

dbx

ソースレベルデバッガ 

dbxtool

ウィンドウベースのソースレベルデバッガ 

gprof

call-graph プロファイルデータを表示する 

indent

C プログラムソースファイルをインデントおよびフォーマットする 

inline

インラインのプロシージャコールの展開 

lint

C プログラムベリファイア 

objdump

COFF オブジェクトファイルの選択された部分をダンプする 

tcov

test coverage 解析および文単位のプロファイルを構築する