[問題] exec的路徑如何指定

看板LinuxDev作者 (涼雨)時間16年前 (2009/02/09 00:34), 編輯推噓1(1011)
留言12則, 3人參與, 最新討論串1/1
請問使用exec時的路徑要如何指定 找了很久的google 幾乎都是一開始就指定好路徑 ex. /bin/uname 但是如果我想要自己輸入指令(指令的程式也是自己寫,ex. uname2) 然後讓exec去跑,那要怎麼做?? 我設定指令存入cmdstr字串,並且已經將最後的'\n'改為' ' execl(" ",cmdstr,0); ^^^ 這裡我不知道要怎麼填 如果是要用execlp 我將指令擷取到buffer(不要參數) execlp(buffer,cmdstr,0),這樣可以用,但是參數的效果卻不出來 我只會execlp("sh","sh","-c",cmdstr,0)的用法 但是這樣搜尋到的是system call的程式 可是我想指定自己寫的程式(但是不要加到system call的編號裡),也不要用sh (我老師希望我們做出一個簡單的小shell,呼叫的程式也都要自己寫) 有方法讓路徑 = 自己指定的路徑/自己做的檔名 嗎 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.134.31.176

02/09 01:07, , 1F
try execvp()
02/09 01:07, 1F

02/09 13:39, , 2F
exec 系列有兩種丟參數的方式
02/09 13:39, 2F

02/09 13:41, , 3F
一種是用 argv 的方式傳入,另一種則是以參數的方式傳入
02/09 13:41, 3F

02/09 13:42, , 4F
是以有沒有 v 來分辨, 如, execv, execve, execvp 這些是用
02/09 13:42, 4F

02/09 13:42, , 5F
argv 的方式當作參數, 就像 main 那樣的方式
02/09 13:42, 5F

02/09 13:43, , 6F
剩餘的話就要這樣傳, execl("name",arg0,arg1,...,0);
02/09 13:43, 6F

02/09 13:44, , 7F
而 execlp, execvp 搜尋的路徑是看 PATH 這個變數
02/09 13:44, 7F

02/09 13:45, , 8F
如果是以你的需求, 用 sh -c 的確是比較快
02/09 13:45, 8F

02/09 13:46, , 9F
不然就用自行拆解出各個參數, 再依序丟改 exec 函數
02/09 13:46, 9F

02/09 13:46, , 10F
至於路徑問題, 你可以使用 excl, execv, execle, execeve
02/09 13:46, 10F

02/09 13:47, , 11F
這幾個函式, 他可以直接丟絕對路徑
02/09 13:47, 11F

02/10 15:57, , 12F
^^成功了~~~多謝
02/10 15:57, 12F
文章代碼(AID): #19Zmcjg6 (LinuxDev)
文章代碼(AID): #19Zmcjg6 (LinuxDev)