2012-05-21 19 views
0

我試圖按名稱在c中執行應用程序,然後運行 我想知道名稱是否合法。是否有任何 檢查c的方法,並找出應用程序是否存在於PATH環境中?在c中的PATH環境中搜索應用程序

感謝

+0

FWIW,並不是所有的平臺只使用'PATH'定位可執行文件 –

+0

那豈不是更容易(更安全)有允許可執行文件的白名單中呢? – dirkgently

+0

查看(Linux)shell的「which」命令的源代碼。你會得到一些線索。 –

回答

2

大概要做到這一點是模仿「的」命令,農曆蘑菇已經建議行爲的最好辦法。

快看看下面的命令

$ strace which ls 

的輸出顯示「這」只是通過$ 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 
... 
相關問題