[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 12:29 / Filesize : 215 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

UNIXプログラミング質問すれ Part5



1 名前:名無し募集中。。。 [05/01/15 02:18:37]
UNIXおよびUNIX clone環境一般のプログラミングに関する質問スレッド

前スレ
Part4 pc5.2ch.net/test/read.cgi/tech/1095843584/
Part3 pc5.2ch.net/test/read.cgi/tech/1085930894/
Part2 pc5.2ch.net/test/read.cgi/tech/1055110889/
Part1 pc2.2ch.net/tech/kako/992/992057422.html

Part3のミラー
makimo.to/2ch/pc5_tech/1085/1085930894.html
Part2のミラー
makimo.to/2ch/pc5_tech/1055/1055110889.html

関連スレ
Cygwin使っている人いますか? その13 (UNIX板)
pc5.2ch.net/test/read.cgi/unix/1099157755/
Cygwin使っている人いますか? 3 (Windows板)
pc5.2ch.net/test/read.cgi/win/1090131123/

関連板
pc5.2ch.net/unix/
pc5.2ch.net/linux/


136 名前:デフォルトの名無しさん mailto:sage [05/02/17 19:29:19 ]
>>126-135
サンクスです。 脳内仕様を、も一回見直してみます。


137 名前:デフォルトの名無しさん mailto:sage [05/02/17 21:09:15 ]
つーかインストール先のデータ使うなんて普通にありそうだが

138 名前:デフォルトの名無しさん mailto:sage [05/02/17 21:36:16 ]
>>137 守ってね。管理面倒になるから。
www.pathname.com/fhs/pub/fhs-2.3.html


139 名前:デフォルトの名無しさん mailto:sage [05/02/18 00:13:21 ]
自己解凍書庫とか作れないじゃん


140 名前:デフォルトの名無しさん mailto:sage [05/02/18 00:24:45 ]
>>139
そこでsharですよ

141 名前:デフォルトの名無しさん mailto:sage [05/02/18 01:04:11 ]
つーかシェルでは自分自身取得できるってことじゃん
無茶苦茶だな

142 名前:デフォルトの名無しさん [05/02/18 01:09:34 ]
馬鹿が多いな
自己パス得られないのはUNIXの欠陥の1つだよ

こいつ(>>138)こんなリンク張れば騙される奴がいるとでも思ってんだろうなw

143 名前:デフォルトの名無しさん mailto:sage [05/02/18 01:15:35 ]
UNIXはそういう便利関数が標準化される前に廃れちゃったからね。
POSIXにもないってのは失敗かもな。

144 名前:デフォルトの名無しさん mailto:sage [05/02/18 01:19:47 ]
まー、それでもなんとかなってるから別にいいけどね。



145 名前:デフォルトの名無しさん mailto:sage [05/02/18 01:21:20 ]
>>141
シェルとCで機能の同期が取れてないのはヤバイ
創作の妨げでしかない


146 名前:デフォルトの名無しさん mailto:sage [05/02/18 01:23:14 ]
はい、これでUNIXのヤバさが1つわかりましたね

147 名前:デフォルトの名無しさん mailto:sage [05/02/18 01:27:05 ]
ハイハイ

148 名前:デフォルトの名無しさん mailto:sage [05/02/18 01:30:22 ]
WindowsではAPI一個呼べば済む問題が、
UNIXでは流儀やら互換性やら実現不能やらで大騒ぎ
たしかにアフォすぎる

149 名前:デフォルトの名無しさん mailto:sage [05/02/18 01:33:30 ]
ファイルシステムのセマンティクスからして違うのに無視して騒ぐバカがいるな。


150 名前:デフォルトの名無しさん mailto:sage [05/02/18 01:35:17 ]
ム板なんてWin厨ばっかなんだからしょうがないべ。


151 名前:デフォルトの名無しさん mailto:sage [05/02/18 01:35:57 ]
こんどは意味論で擁護か
おめでたい頭だな
UNIX板で普及スレとか立ってたけど
こんなアフォばっかじゃ永久に無理

152 名前:デフォルトの名無しさん mailto:sage [05/02/18 01:42:16 ]
それ結構昔だね。
おれも無理だと思う。

153 名前:デフォルトの名無しさん mailto:sage [05/02/18 01:45:20 ]
まあ、ファイルがバラけるのを良しとしない人は多い気がする。
2chでそういう便利関数集めた汎用ライブラリ作らない?
主要UNIX環境で動くようなやつを。
完全PDSで。

154 名前:デフォルトの名無しさん mailto:sage [05/02/18 01:50:15 ]
PDSて・・・
PC98出身のフリーウェア作者かい?



155 名前:デフォルトの名無しさん mailto:sage [05/02/18 01:50:35 ]
じゃあ、とりあえず
・Linux、*BSD、SunOS等のメジャーな奴のやり方教えてくれ
Linuxでのやり方は上に書いてたっけ。

156 名前:デフォルトの名無しさん mailto:sage [05/02/18 01:51:50 ]
シェルスクリプトならフルパスが得られるんだから、バイナリでもフルパスが
欲しいなら
#! /bin/sh
dir=$(dirname $0)
exec ${dir}/../lib/hoge/hoge.bin "$@"
みたいにするだけだよ。
jdk とか firefox とかでも使ってる、割とメジャーな手法。

157 名前:デフォルトの名無しさん mailto:sage [05/02/18 01:53:40 ]
じゃあそれ最初に言えよ・・

158 名前:デフォルトの名無しさん mailto:sage [05/02/18 01:56:54 ]
>>157
そういうシェルスクリプトを作るってことだから。
たぶん何の解決にもなってない。
UNIXは製作者側のセキュリティ保護をまったく考慮しないOS。

159 名前:デフォルトの名無しさん mailto:sage [05/02/18 01:57:51 ]
つまり嘘ファイルを掴まされてもわからんてことね。

160 名前:デフォルトの名無しさん mailto:sage [05/02/18 01:58:12 ]
それ引数にフルパス渡せばフルパスが分かるっていってるだけですから〜残念!

161 名前:デフォルトの名無しさん mailto:sage [05/02/18 02:02:25 ]
シェルスクリプトで出来ることがCで出来ないとでも思ってるのか?


162 名前:デフォルトの名無しさん mailto:sage [05/02/18 02:04:10 ]
ここはひどく汚染された釣堀ですね

163 名前:デフォルトの名無しさん mailto:sage [05/02/18 02:06:33 ]
釣り師もレッテル貼るしか能が無いしな。


164 名前:デフォルトの名無しさん mailto:sage [05/02/18 02:12:52 ]
>>134
>>132の言う問題が明確に問題視されたのは、
Windows 2000 TSEのマルチユーザアプリケーションのガイドラインができてからですね。
その時からWindows(TSEやXP)でも>>124のやり方はガイドライン違反です。
今やMac OS Xでもそうです。




165 名前:デフォルトの名無しさん mailto:sage [05/02/18 02:14:22 ]
実行可能ならパスは通っているはずだから環境変数PATHを走査して…ってwhichみたいなことをする他ないのか…

166 名前:デフォルトの名無しさん mailto:sage [05/02/18 02:16:40 ]
違反って言い方は不正確だな。
Windowsロゴを取得する際に要求される仕様だってだけ。
しかもそれはユーザーデータの保存場所の指定に関してであって
カレントディレクトリのコンフィグレーションを読むのは
.NETアプリだって普通にやってるよ。

167 名前:デフォルトの名無しさん mailto:sage [05/02/18 02:21:38 ]
>>165
パスが通ってない所のものでも実行できるべ?

168 名前:デフォルトの名無しさん mailto:sage [05/02/18 02:22:13 ]
元々UNIXは専用マシンと一緒に買わせる抱き合わせ商法。
抱き合わせ商法が許されたのは20年以上前の秋葉原ぐらいだが、
現在も生き残ってるベンダーは、今でもその商法で売っている。
まさに20年前の思想。
当然ソフトウェアの保護にはものすごく疎い。
ぶっちゃげ自分のシステム以外の事はどうでもよく、問題を認識してすらいない。
ベンダーはマシンを買ってもらえれば元が取れるからわれ関せず。
不正ユーザーにとっては、動いているソフトは勝手にクラックしてください
と言わんばかりの無法地帯。

169 名前:デフォルトの名無しさん mailto:sage [05/02/18 02:24:49 ]
>>167
それなら明確に起動時にパスを指定してるから位置がとれるだろうよ。

170 名前:デフォルトの名無しさん mailto:sage [05/02/18 02:27:18 ]
>>168
とはいえ、今のUNIX(互換OS)の主流であるLinux系やら
BSD系は通常ハードウェアについてこないぞ。

MacOSはついてくるな。

PCは、MSとの契約でWindowsを抱き合わせしないと販売できない
(Windowsを供給してもらえない、仕切り値が高くなる)ようになってる。

171 名前:デフォルトの名無しさん mailto:sage [05/02/18 02:28:16 ]
>>169
まあ1クッション置けばそうかもしれんが・・・

172 名前:デフォルトの名無しさん mailto:sage [05/02/18 02:28:36 ]
>>167
あぁ、そうか。あかんね。
カレントディレクトリとargv[0]を繋げるとか…駄目っぽい。

173 名前:デフォルトの名無しさん mailto:sage [05/02/18 02:35:26 ]
lsは常に/bin/lsでないとこまる。
たとえば/tmp/.../lsとか、./lsはあやしい。

174 名前:デフォルトの名無しさん mailto:sage [05/02/18 02:38:15 ]
そういう話じゃないだろ。



175 名前:デフォルトの名無しさん mailto:sage [05/02/18 02:40:36 ]
UNIX板には、シェルスクリプト、よくてperlやrubyスクリプトを
ネチネチいじってオナニーしてる連中しか居らんべ?

176 名前:デフォルトの名無しさん mailto:sage [05/02/18 02:42:52 ]
argv[0][0]が
・'/'なら絶対パス。
・'/'でなくargv[0]に'/'を含むなら相対パス。
・そうでないならPATHを調べる。
でどう?

177 名前:デフォルトの名無しさん mailto:sage [05/02/18 02:45:05 ]
argv[0] はただの引数
execl("/path/to/your/program", "/bin/cat", "hoge", NULL);
されたらどうするよ。

178 名前:デフォルトの名無しさん mailto:sage [05/02/18 02:46:49 ]
出来ません。デフォルトパスは~/にするよろし。
でいいじゃん。

179 名前:デフォルトの名無しさん mailto:sage [05/02/18 02:47:40 ]
>>177
もちろんお手上げ。

180 名前:デフォルトの名無しさん mailto:sage [05/02/18 02:49:16 ]
というかmain()に入ったときには
ファイルはunlinkされてるかもしれんし

181 名前:デフォルトの名無しさん mailto:sage [05/02/18 02:53:23 ]
どうしてできません。ごめんなさい。の一言がいえないのか。

182 名前:デフォルトの名無しさん mailto:sage [05/02/18 02:54:20 ]
>>180
確かにそれはそうなんだが、そこまで含めてしまうとなあ・・・
せめて自分自身の実体があった場所とか欲しいな

183 名前:デフォルトの名無しさん mailto:sage [05/02/18 02:57:09 ]
psの -o comm とか -o args は
プロセス構造体とかユーザ構造体から
取得してるのですか??

184 名前:デフォルトの名無しさん mailto:sage [05/02/18 03:05:32 ]
>>177
ところでpsコマンドで見れるのは
>execl("/path/to/your/program", "/bin/cat", "hoge", NULL);
で言うと"/path/to/your/program"?それとも"/bin/cat"?
今端末の前に居ないんで確認できないんだ。
折角自身のPIDが分かるのにそこから引き出せないのかな?

すみません、ごめんなさい、出来ないみたいです、諦めます。



185 名前:デフォルトの名無しさん mailto:sage [05/02/18 03:16:40 ]
ld.so(1)さんが、頑張ってますんで参考に。

186 名前:デフォルトの名無しさん mailto:sage [05/02/18 03:30:38 ]
>>181
ここまでの議論は既にできないことを前提に、
ではどうするかということに移ってると思うんだが。

なぜ謝る必要があるのかわからんな。
そういうことはKen ThonmsonやらPOSIX作ったやつらやらに言っとくれ。

187 名前:117 = 124 mailto:sage [05/02/18 08:35:27 ]
>>117>>124 でつ。 @自宅なので、ID 変わっとります。
自分の書き込みに、こんなにたくさんレスがついたの、初めてです。 やっと、ヒッキー卒業
できそうな気がしてきました。 釣り師の快感も理解でき(ry
とまれ、>>127 >>128 のご意見は参考になりますた。
それと、>>181。 一番、オモシロカターヨ。
ミンナ、アリガd

188 名前:117 = 124 mailto:sage [05/02/18 08:36:01 ]
↑ つーか、ID ないじゃん

189 名前:デフォルトの名無しさん mailto:sage [05/02/18 09:30:24 ]
>>184
psで見れるのはどのUNIXでもargv[0]だと思う。

190 名前:デフォルトの名無しさん mailto:sage [05/02/18 10:20:06 ]
んだから、unixのファイルシステムでは、
1このファイルに対してファイル名(パス)がいくつでもつけられるから、
実行ファイルのある場所は?っていう質問には無理があるのよ。

実行ファイルといっしょに置いた設定ファイルを使おうとした場合、
最悪でも今のPATHと照らし合わせれば、どのファイル名で実行されたかは
わかるだろうけど(which)、そこに一緒に置かれた設定ファイルが
あるかどうか保証できないじゃん。


191 名前:デフォルトの名無しさん mailto:sage [05/02/18 10:54:10 ]
>>190
というか、ユーザー空間からpathnameを取得するための関数って
POSIXには含まれてないの?pathnameの有効性ともかくとしてさ。

192 名前:デフォルトの名無しさん mailto:sage [05/02/18 10:57:22 ]
man 〜すると、
| pathnameの有効性はともかく、こうなります
って書いてあんのかよ…いらねーよ。つーか有害。


193 名前:デフォルトの名無しさん mailto:sage [05/02/18 11:01:41 ]
>>192
なにを言ってるのかよく分らないんだけど、
execveシステムコールを発行する時点で、
pathnameは決まってるんじゃないの?だったら
それをユーザー空間から取得できるよう、共通のインターフェイスを
提供してもいいんじゃないの?っていう話なんだけど。

194 名前:117 = 124 mailto:sage [05/02/18 11:13:30 ]
♪ 喧嘩をやめて〜 二人を止めて〜
♪ 私のため〜に〜 争わな〜い〜で〜



195 名前:デフォルトの名無しさん mailto:sage [05/02/18 11:22:17 ]
>>193
アプリは /usr/xxx/app
設定ファイルは /usr/xxx/app.conf
だとして

ln /usr/xxx/app /usr/bin/app
とやったらどうなのよ?
/usr/bin/app として実行したら
/usr/bin/app.conf は存在しないだろ?


196 名前:デフォルトの名無しさん mailto:sage [05/02/18 11:41:17 ]
>>195
それは「設定ファイルが見付かりません」でいいんじゃないの。

Linux で readlink("/proc/self/exe", ...) するとパスが取れるよう
な仕組みの、共通の API が欲しいぞ、と。



197 名前:デフォルトの名無しさん mailto:sage [05/02/18 11:44:43 ]
それを見付かりませんなんてするよりパスを固定する方がはるかに建設的じゃん。
>>195みたいなのはUNIXでは完全にlegalな使い方なんだから、
それをわざわざ制限するのはアホ。


198 名前:デフォルトの名無しさん mailto:sage [05/02/18 11:53:45 ]
つまり Sun の Java はアホだと。

少ないとは思うけど需要はあるので、共通の手段があってもいいと思う
けどねえ。自分は使わないけど。



199 名前:デフォルトの名無しさん mailto:sage [05/02/18 12:01:48 ]
>>198
いったいいつごろのJavaの話をしているのかねえ。


200 名前:デフォルトの名無しさん mailto:sage [05/02/18 12:11:10 ]
>>198
JDKはその配布形態から定数を埋め込めないが、
代わりにちゃんとJAVA_HOMEという環境変数をみるよ。
それがない場合にやむを得ずdirname $0をとってるだけ。



201 名前:デフォルトの名無しさん mailto:sage [05/02/18 12:26:42 ]
>>196
>>192

202 名前:デフォルトの名無しさん mailto:sage [05/02/18 12:48:45 ]
ちっちゃなアプリなら、インストールパスを固定
(configure 時に --prefix で指定する) で十分だ
と思うけどなあ。そんなに大きなアプリなん?
インストールされた場所から設定ファイルを探すっ
てのは、UNIX 的にはむしろ嫌われることが多い。
どうしてかっていうと、インストールされたもの
は NFS などで共有される可能性があるけど、
設定ファイルは各マシンごとあるいは各ユーザー
ごとで別々にしたいから/etc か $HOME に置くの
が普通だから。

203 名前:デフォルトの名無しさん mailto:sage [05/02/18 12:51:30 ]
大きなアプリで、設定ファイルじゃなくて、アプリ
に附属するデータファイルがあり、その場所を変更
したい場合には、JDK みたいに環境変数で指定可能
にして、環境変数がない場合には wrapper script
経由で dirname $0 を見るってのがまあ習慣。

Linux 方式は、カーネルメモリがちょっと無駄になる
(普通のカーネルは、わざわざ使えないかもしれない
情報を記憶して、物理メモリを無駄にするなんて
ことはしない) ってことの他に、>>126 の言うよう
に chroot 環境からは、そのアプリが使えないって
問題もあるな。


204 名前:デフォルトの名無しさん mailto:sage [05/02/18 12:59:37 ]
あと、だから UNIXは… なんて言ってる Win厨は、
シンボリックリンクがないせいで、固定パス名
(たとえば C:\Program Files\アプリ名\data) から
データを検索するように作ると、起動ドライブにしか
データファイルを置けなくて実用に耐えないとか、
実行中のアプリケーションやDLLを削除することが
できないせいで、セキュリティフィックスを当てる
間は実行中のサービスを止める必要があるし、結局
一度はリブートが必要になることが多いっていう
Windows の欠陥を欠陥だと認識できてないんだと
思うな。

UNIX の場合、プログラム実行中でも削除できてしまう
から、パス名の検索はもともとできない変わりに、
サービスを止める時間はほんとに一瞬で済むし、
リブートは必要ないんだが。



205 名前:デフォルトの名無しさん mailto:sage [05/02/18 13:03:04 ]
ムキになった海栗糞厨の見当違いなWindows批判が始まりました。

206 名前:デフォルトの名無しさん mailto:sage [05/02/18 13:05:36 ]
>>204
NTFS 使ってるならハードリンクもシンボリックリンクも使えるよ。

207 名前:デフォルトの名無しさん mailto:sage [05/02/18 13:05:53 ]
そのへんにしか反応できないって哀しいね。


208 名前:デフォルトの名無しさん mailto:sage [05/02/18 13:10:19 ]
>>206
XPに限定されるけどね。

209 名前:デフォルトの名無しさん mailto:sage [05/02/18 13:13:19 ]
WindowsにUnixスタイルを持ち込むのはアホ。
同じように、UnixにWindowsスタイルを持ち込むのはアホ。
どっちが良いとか悪いとかはケースバイケースでしょ。

210 名前:デフォルトの名無しさん mailto:sage [05/02/18 13:41:18 ]
結局、
できない
ということでまとまりましたか?

211 名前:デフォルトの名無しさん mailto:sage [05/02/18 13:50:34 ]
>>206
シンボリックリンクってどうやるの?
.lnkの話?

212 名前:デフォルトの名無しさん mailto:sage [05/02/18 13:54:17 ]
>>210
wrapperスクリプト経由ならできるでまとまったのでは?

213 名前:デフォルトの名無しさん mailto:sage [05/02/18 13:56:59 ]
つまり、
できないと

214 名前:デフォルトの名無しさん mailto:sage [05/02/18 14:00:18 ]
>>211
ttp://homepage1.nifty.com/emk/symlink.html



215 名前:デフォルトの名無しさん mailto:sage [05/02/18 14:01:26 ]
>>209
そうなんだけどそれがわからん奴が多過ぎ。ム板にあるせいか
自分の無知からくる妄想的な優越感にかこつけて
昏いコンプレックスを晴らそうとする厨が絶えないね。
まあ元から知性に欠けるので馬脚を現しまくりなんだけど。

>>212
まとめは>>202-203だろ。
別にラッパースクリプトでしなければならない必然性はないけどね。
単にそれが手間がかからないからそうすることが多いってだけで。
あえて言えば、Cのコード書くより早いのと、動作を知るのに
特にドキュメントを探し回らなくても読めばわかるってのが利点だね。


216 名前:204 mailto:sage [05/02/18 14:01:34 ]
>>206
ははあ、Windows 2000 からリバースポイントって機能が追加されて
たのか。勉強になりますた。
これって、ディスクが足らなくなって増設した場合とか、画期的に
便利だと思うんだけど、広まってないのはなんでかな?

>>211
support.microsoft.com/default.aspx?scid=kb;ja;JP205524
とか
homepage1.nifty.com/emk/symlink.html
とかあるみたい。
ntfs.sys にパッチを当てないとディレクトリしか指せないみたいだ
けど、ディスクが足りなくなった場合とかはそれでも問題なかろう。

通常はマシンごとにある設定ファイルを、ネットワークで共有したい
から /etc/設定ファイル → /global/etc/設定ファイル みたいな
シンボリックリンクを作りたいっていう要求に相当するのは無理だけ
ど。ファイルを指せないだけじゃなくて、リモートファイルシステム
も指せないみたいだから。


217 名前:デフォルトの名無しさん mailto:sage [05/02/18 14:01:57 ]
FAQ

218 名前:デフォルトの名無しさん mailto:sage [05/02/18 14:17:42 ]
>>215

全然問題を理解してないね
さすがwwwwww

219 名前:デフォルトの名無しさん mailto:sage [05/02/18 14:27:58 ]
>>218
不親切な奴だな。

>>215
wrapper スクリプトの場合は、スクリプトが setuid/setgid
されてない限りは確実に argv[0] にパス名が渡ってくるん
だけど、Cプログラムの場合、argv[0] には基本的にコマンド
名しか渡ってこないから無理なんよ。
まあ、C でも、
1. strchr(argv[0], '/') != NULL なら argv[0]
 からディレクトリを取り出す。
2. さもなくば $PATH から $argv[0] を探し、そこ
 から探す
とすれば、実用上は問題なく探せるわけだが。

220 名前:117 = 124 mailto:sage [05/02/18 16:41:26 ]
もう勘弁してくだせぇ。
「実行モジュールと同一ディレクトリを、設定ファイル置き場のデフォルトに・・」なんて
こたぁ、もう口が裂けても言いませんからぁ・・・
gnu さまに逆らおうなんて気は、毛頭なかったんでごぜーます。 ほんの出来心で・・・
デフォルト位置は、リテラル文字列でソースに梅込みますです。
そのあと、core 吐いて氏にます。

221 名前:デフォルトの名無しさん mailto:sage [05/02/18 16:51:45 ]
釣果に大満足で引き上げる>>220であった。

222 名前:デフォルトの名無しさん mailto:sage [05/02/18 17:24:55 ]
>>219
> だけど、Cプログラムの場合、argv[0] には基本的にコマンド
> 名しか渡ってこないから無理なんよ。

え! もしかして俺はargv[0]に常にフルパスが入ると思ってたとみなされてるわけ?
イヤン。

> まあ、C でも、
> 1. strchr(argv[0], '/') != NULL なら argv[0]
>  からディレクトリを取り出す。
> 2. さもなくば $PATH から $argv[0] を探し、そこ
>  から探す
> とすれば、実用上は問題なく探せるわけだが。

普通そうするでしょ。

> >>215
> wrapper スクリプトの場合は、スクリプトが setuid/setgid
> されてない限りは確実に argv[0] にパス名が渡ってくるん

これって$0のこと? そんなわけないと思うんだけど。
それともスクリプトの側にフルパスで書いてあるからって話?


223 名前:デフォルトの名無しさん mailto:sage [05/02/18 18:00:43 ]
> これって$0のこと?

そうそう。
そう。$0 のこと。書き間違えた。

> そんなわけないと思うんだけど。

いいや、そんなわけある。
でないと、インタープリタ (/bin/sh とか) がスクリプトが
どこにあるか見つけられないでしょ。だから $0 には確実に
ディレクトリ名が渡ってくる。細かいことを言うと $PATH に
カレントディレクトリが入っていて (← これはセキュリティ
ホールだから避けるないとまずい設定だがそれは置いておいて)、
カレントディレクトリのスクリプトを起動した場合には、$0 に
ディレクトリ名が入ってないわけだが、この場合もカレント
ディレクトリにあるスクリプトであるという情報はちゃんと分かる。

wrapper を使うことが結構多いのは、この性質を利用するため。

ただし、セキュアな setuid/setgid スクリプトを実装している
OS 上で、setuid/setgid スクリプトを起動した場合は例外。


224 名前:デフォルトの名無しさん mailto:sage [05/02/18 18:29:57 ]
>>204 == >>216
> >>206
>ははあ、Windows 2000 からリバースポイントって機能が追加されて
>たのか。勉強になりますた。
>これって、ディスクが足らなくなって増設した場合とか、画期的に
>便利だと思うんだけど、広まってないのはなんでかな?

デフォルトフォーマットであるベーシックディスクでは実現出来ないので
ダイナミックディスクにフォーマットコンバージョンする必要がある。
別にディスクの中身が消える訳ではないのだが、変換直前に警告がうるさく
出てくるので普通の人はビビってそこで思いとどまることが多い。
パフォーマンスの低下を心配して思いとどまる人も多いらしい。
私は問答無用でインストール直後にダイナミックディスクにしてます。



225 名前:デフォルトの名無しさん mailto:sage [05/02/18 18:47:33 ]
>>184
FreeBSDで
execlp("./hoge", "/bin/oreore", "oredayo", NULL);
を、じっこうして、
ps -o comm,args すると、該当行の表示は

hoge /bin/oreore oredayo (hoge)
となりますた。(ばれています。)

manによると
> キーワード ucomm (アカウンティング名) は信用できます。
これのaliasのようです。

226 名前:デフォルトの名無しさん mailto:sage [05/02/18 18:47:38 ]
>>223
> > そんなわけないと思うんだけど。
>
> いいや、そんなわけある。
> でないと、インタープリタ (/bin/sh とか) がスクリプトが
> どこにあるか見つけられないでしょ。だから $0 には確実に
> ディレクトリ名が渡ってくる。細かいことを言うと $PATH に

ああ、そうかそうか。PATHの上にある場合は確かにフルパス必要ですね。
なぜか相対パスで叩く場合しか考えてませんでした。納得。

ついでに恥をしのんでおききしますが、

> ただし、セキュアな setuid/setgid スクリプトを実装している
> OS 上で、setuid/setgid スクリプトを起動した場合は例外。

これってどのようなOSでどのような動作をしますか?
私の知識は「最近はセキュリティ上の理由で昔のOSと違って
スクリプトのsetuidビットは無効になる」って10年前ので止まってるんですけど、
最近はその問題を解決した上でスクリプトに立てられたsetuidが有効になるんですか?


227 名前:デフォルトの名無しさん mailto:sage [05/02/18 19:00:48 ]
> これってどのようなOSでどのような動作をしますか?

通常、スクリプトファイルをオープンするのはインタープリタ
の仕事だが、このような OS では、カーネルが直接スクリプトを
オープンし、そのファイルディスクリプタ番号を、インタープリタ
に「/dev/fd/ディスクリプタ」という名称で渡す。

少なくとも、SVR4 と NetBSD では実装してる。
NetBSD はカーネルオプションに SETUIDSCRIPTS と書かない限りは
無効。NetBSD が OpenBSD との分かれる前からある機能なので、
たぶん OpenBSD でも使えるんじゃないかと思う。
10年前でも、SVR4 は間違いなく対応してたと思うけど…
SVR4 直系である Solaris でも勿論使える。

228 名前:デフォルトの名無しさん mailto:sage [05/02/18 19:06:26 ]
>>221
その背後で、魚たちはなおもじゃばじゃばと跳ね続けるのでした。
脱糞。

229 名前:デフォルトの名無しさん mailto:sage [05/02/18 19:15:43 ]
ヂャバジャバ

230 名前:デフォルトの名無しさん mailto:sage [05/02/18 19:18:38 ]
193だけど、誰もこれには真面目に答えてくれないのかな?
カーネル内にプロセスと1:1対応する実行イメージのファイルパスは
保存されてるわけでしょ。なんでそれがユーザー空間から取得できないの?
Win厨とバカにするなら、まずは疑問にはちゃんと答えるべきでしょ。

231 名前:デフォルトの名無しさん mailto:sage [05/02/18 19:23:34 ]
ファイル自体とファイルのパスは1:1対応じゃないと何度いったら

232 名前:デフォルトの名無しさん mailto:sage [05/02/18 19:26:10 ]
パッケージ(アプリ)の置場所を自由に変えるなんて事をしたい場合は、
そのパッケージに依存するパッケージが、
置場所を見つけられるような機構がないとどうにもならない。
そうしないとRPMにあるようなfile単位でのconflict,
dependを扱えなくなってしまうから。

233 名前:デフォルトの名無しさん mailto:sage [05/02/18 19:27:09 ]
>>230
されてない。取得できるとも限らない。
unlink(2)してしまえばfile systemとの関係がなくなるので。

234 名前:デフォルトの名無しさん mailto:sage [05/02/18 19:27:11 ]
なんだかよくわかりませんがWindowsの圧勝ってことにしておきますね。



235 名前:デフォルトの名無しさん mailto:sage [05/02/18 19:27:48 ]
>>230 そういうものを利用するというのが既に挙げられたような具合で
悪習といえるからじゃない?


236 名前:デフォルトの名無しさん mailto:sage [05/02/18 19:28:57 ]
>>231
ハードリンクやchrootでpathnameという文字列の意味自体が変わるってことは分ってる。
知りたいのは、システムコールとして渡った文字列。なんでそれがユーザー空間から
取得できないのかってこと。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<215KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef