0

名前でcでアプリを実行しようとしています.実行前に、名前が合法かどうかを確認したい. c をチェックインして、アプリが PATH 環境に存在するかどうかを確認する方法はありますか?

ありがとう

4

1 に答える 1

2

おそらく、これを行う最善の方法は、Lunar Mushrooms が既に提案したように、'which' コマンドの動作を模倣することです。

次のコマンドの出力のクイックルック

$ strace which ls

「which」は単純に $PATH エントリをループし、それをコマンド名 (上記の例では「ls」) と連結し、その上で stat64 を呼び出します。stat64 が -1 (ファイルが存在することを意味する) 以外の値を返した場合、ループは中断されます。テストされたコマンドからの出力の関連スニペットは次のとおりです。

...
stat64("/home/mz/bin/ls", 0xbfa84350)   = -1 ENOENT (No such file or directory)
stat64("/usr/local/sbin/ls", 0xbfa84350) = -1 ENOENT (No such file or directory)
stat64("/usr/local/bin/ls", 0xbfa84350) = -1 ENOENT (No such file or directory)
stat64("/usr/sbin/ls", 0xbfa84350)      = -1 ENOENT (No such file or directory)
stat64("/usr/bin/ls", 0xbfa84350)       = -1 ENOENT (No such file or directory)
stat64("/sbin/ls", 0xbfa84350)          = -1 ENOENT (No such file or directory)
stat64("/bin/ls", {st_mode=S_IFREG|0755, st_size=96324, ...}) = 0
stat64("/bin/ls", {st_mode=S_IFREG|0755, st_size=96324, ...}) = 0
geteuid32()                             = 1000
getgid32()                              = 1000
...
于 2012-05-21T13:36:06.530 に答える