Mac OS X を使っていて、あれ?これってどうするのかなといったちょっとした疑問についてまとめてあります。といっても UNIX ユーザーから見たの疑問なので、UNIX
を使ったことがない方にはあまり役にたちませません :-)
質問 |
答え |
| root になるには? |
Terminal で sudo passwd root と実行して
root のパスワードを設定する。はじめに聞いてくるパスワードは現在ログインしているユーザーのパスワードを入力。NetInfo
を使って設定する方法はこちら。 |
| シングルユーザーモードで起動するには? |
起動音がしたらすぐに Command + S を押す。ルートパーティションを書き込み可能にマウントし直す方法は(# はプロンプト)
# mount -uw /
|
| 起動時にステータスを表示したい場合は? |
起動音がしたらすぐに Command + V を押す。 |
| コンソールモードにするには? |
Aqua のログイン画面で、アカウント >console でログインする。パスワードは入力しない。コンソールモードになると、キーボードが JIS 配列では無くなるので注意が必要。何処で変えるのかわかりません。ログインして、ログアウトすれば
Aqua が起動されるが、ログインせずにそのまま Aqua に戻りたい時は Ctrl+D をタイプする。 |
| コマンドラインから NetInfo データーベースの情報を見るには? |
niutil コマンドを使用する。
データーベースのリストを見る (# はプロンプト)
# niutil -list . /
1 users 7 groups 27 machines
...
フィールドの内容を見る
# niutil -read . /users/dayan
home: /Users/dayan
uid: 502
_shadow_passwd:
name: dayan
gid: 20
...
また、nidump(フィールド内の情報を見る)、niload(NetInfo データーベースに登録する)といったコマンドが用意されている。 |
| コマンドラインからユーザー登録する方法は?(ユーザーdayan を追加) |
| データベースへのエントリを作る: |
niutil -create / /users/dayan |
| シェルを設定: |
niutil -createprop / /users/dayan shell /bin/tcsh |
| 実名を登録: |
niutil -createprop / /users/dayan realname "Dayan" |
| uid を設定: |
niutil -createprop / /users/dayan uid 502 |
| gid を設定: |
niutil -createprop / /users/dayan gid 20 |
| ホームディレクトリを設定: |
niutil -createprop / /users/dayan home /Users/dayan |
| パスワードのエントリを作成: |
niutil -createprop / /users/dayan _shadow_passwd |
| パスワードを設定: |
passwd dayan |
| wheel グループに加える: |
niutil -appendprop / /groups/wheel users dayan |
|
| ネットワークに関する情報は? |
基本的なホストの設定は、/etc/hostconfigで行う。/etc/iftab にインターフェースの情報を記述する。
DHCP を利用する場合
| /etc/iftab: |
en0 inet -DHCP- |
| /etc/hostconfig: |
HOSTNAME=-AUTOMATIC-
ROUTER=-AUTOMATIC- |
|
| NFS の設定は? |
/etc/exports ファイルを作るタイプの設定方法。 |
| OS 立ち上げ時に起動されるプロセスを設定するには? |
Mac OS X では、SystemStarter というプログラムが起動したいサービスのスクリプトを実行します。SystemStarter
は、/System/Library/StartupItems/ にあるスクリプトを起動します。
スクリプトの追加方法: Apache の場合、/System/Library/StartupItems/Apache/Apache
というシェルスクリプトを以下の形式で作成する。この Apache というディレクトリー名やファイル名はユニークなものならば何でも構わない。
#!/bin/sh
##
# Start Web Server
##
. /etc/rc.common
if [ "${WEBSERVER:=-NO-}" = "-YES-" ]; then
ConsoleMessage "Starting web server"
/usr/sbin/apachectl start
fi
さらに、/System/Library/StartupItems/Apache/StartupParameters.plist
ファイルを作成する。
{
Description = "Apache web server";
Provides = ("Web Server");
Requires = ("Disks", "Resolver");
Uses = ("NFS", "Network Time");
Preference = "None";
Messages =
{
start = "Starting Apache web server";
stop = "Stopping Apache web server";
};
}
最後に、/etc/hostconfig に以下の行を追加します。
WEBSERVER=-YES-
/etc/hostconfig に追加するシェル変数は、ユニークなものでなくてはならず、起動スクリプトで if 文に使用したものと同じでなければならない。
これらの事でわかるように、スクリプト等を作成したなら /etc/hostconfig に登録された各変数の値を -YES-
や -NO- とすることで、OS 起動時にサービスを開始するかどうか決定できます。 |
| ディスクのマウント方法は? |
自動的にマシンに接続された全てのファイルシステムを探し、automounter が自動的に、全てのファイルシステムをマウントするようになっている。/etc/hostconfigの中のAUTODISKMOUNT変数を-NO-に変えたらどうなるのだろう?
Automount をやめて /etc/fstab に記述すれば、マウントしたいものだけマウントできるようなことを何処かで見ましたが実際には試していません。 |
| Mac OS X のバイナリーフォーマットは? |
Mac OS X は、Mach-O (Mach Object) というバイナリーフォーマットを採用している。ELF
ではなく、ELF とも互換はありません。 |
| コンパイラにおける注意 |
バージョン
Mac OS X (Build 4K78) に付いてきた Development Tools に含まれるコンパイラは、gcc
2.95.2 がベース。Mac OS X 10.2.x からは、gcc 3 がベースになりました。 |
コンパイルオプション
いろいろな情報を出力してくれるので、コンパイルする際に -Wall コマンドラインオプションを必ずつけることをお勧めします。 |
Mac OS X 特有のプリデファインドシンボルは?
__APPLE__ |
/usr/lib/libc.a は?
/usr/lib/libSystem.B.dylib になります。リンカで最後に -lSystem をリンクしています。 |
シェアードライブラリーの作成
ライブラリを作る時は
cc -dynamiclib -undefined suppress -install_name
libFoo.dylib -o libFoo.dylib a.o b.o c.o ...
とします。この時、標準ライブラリの多重定義が出るようならコンパイルオプションで -nodefaultlibs または -nostdlib をさらに指定します。
また、シェアードライブラリーをリンクする場合、Mac OS X のダイナミックリンクの仕組みが他の UNIX
とはちょっと異なる(シェアードライブラリーのロードの仕方が違う)ので、リンカに -bind_at_load を指定します。(コンパイラ cc で指定する時は -Xlinker -bind_at_load を指定) |
dyld 形式のダイナミックライブラリ
| UNIX (Linux) |
Mac OS X |
const char *filename =
argv[1];
void *handle =
dlopen(filename, RTLD_NOW); |
const char *filename = argv[1];
NSObjectFileImage *handle;
NSObjectFileImageReturnCode *returnCode =
NSCreateObjectFileImageFromFile(filename, handle);
if (returnCode == NSObjectFileImageSuccess)
/* 以下、自分のコードが行う他の任意の処理を行う */ |
int result = dlclose(handle); |
DYLD_BOOL result = NSDestroyObjectFileImage(handle); |
printf("%s\n", dlerror()); |
int *null;
NSLinkEditErrors *c;
const char **errorMsg;
NSLinkEditError(c, null,
(const char**)lpLibFileName,errorMsg);
printf("%s\n", errorMsg); |
void *address =
dlsym(handle, symbol); |
void *address = NSAddressOfSymbol(handle); |
Mac OS X では、dl* の動作を完全に同じようにエミュレートする API は存在しません。既存のコードの変更を避けたい場合は、OpenDarwin
プロジェクトの dlcompat ラッパを使用するという方法があります。 |
ヘッダファイルとフレームワーク
標準のヘッダファイルは、/usr/include にあります。Mac OS X のフレームワークは、共有ライブラリに似ており、ヘッダ、ライブラリ、その他を
1 つのフォルダに寄せ集めたものになっています。各フレームワークは、別々の場所に記憶されているため、それぞれ個別に検索する必要があります。
アップルが提供するフレームワークは、/System/Library/Frameworks/ にあります。それぞれのディレクトリには
Headers という名前のディレクトリがあり、そこに共有のヘッダファイルがあります。
自分のフレームワークは、フレームワークを公開するかどうかに応じて、/Network/Library/Framework、/Library/Framework、または
~/Library/Frameworks などにインストールできます。
| UNIX (Linux) |
Mac OS X |
| alloc.h |
stdlib.h |
| ftw.h |
fts.h (fts_open, fts_children, fts_close) |
| getopt.h |
unistd.h |
| lcrypt.h |
unistd.h |
| stream.h |
iostream.h |
| utmpx.h |
utmp.h |
| values.h |
limits.h |
|
関数
| UNIX (Linux) |
Nac OS X |
| crypt |
crypt 関数の Mac OS X のバージョンの動作は、128 ビット定数ではなく 64 ビット定数として暗号化する |
| dysize |
(year) %4 == 0 && ((year) %100 != 0 || (year)
% 400 == 0) |
| ecvt、fcvt |
sprintf または snprintf で代用 |
| poll |
select に置き換えてコードを修正 |
| shmget |
mmap の利用を推奨 |
|
|
| Java |
ProjectBuilder の Format メニューの File Encodings から No-lossy Ascii
を選択してUnicode 以外のコードを UnicodeのLarin-1にしてファイルに保存するようにする。
MRJApp.properties ファイルの file.encoding を x-sjis にする。その他、改行コードを設定する
line.separator やロケールを設定する user.region, user.language、パスの設定をする
file.separator なども注意する。 |