[問題] Linux 使用exec() 和wine

看板Linux作者 (揚揚)時間4年前 (2020/09/08 19:31), 編輯推噓2(2012)
留言14則, 3人參與, 4年前最新討論串1/1
各位好,小弟現在有一個測試檔案Project.exe,執行時需要輸入一個字串後便會創建該字 串名的檔案 我先以wine64在linux上執行,是成功的 https://i.imgur.com/oga2Tvf.jpg
在搭配pipe (將要輸入的字串,此字串為test11111.dat放進123.dat裡) 因此在terminal輸入 wine64 Project1.exe < 123.dat 就會生成test11111.dat 到這邊也沒問題 然而在搭配fork()及execlp時總是無法成功 https://i.imgur.com/HNdBvJK.jpg
我的問題是不知道要把 < 123.dat放在哪邊才會成功 以下為失敗嘗試 1.放在32行,但報錯說wine抓不到檔案 https://i.imgur.com/IdWOPyA.jpg
2.放在exelcp函數裡,但執行後依舊在等我輸入參數,沒有pipe進去 https://i.imgur.com/4fMlZCK.jpg
拜託各位大神幫幫艱困研究生QQ,搞好久了... 我可以請你喝個飲料或吃飯報答QQQQ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 110.28.73.17 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1599564670.A.943.html

09/08 19:46, 4年前 , 1F
你用錯函數了,要能夠 io 重導這類,若你呼叫是現成外部
09/08 19:46, 1F

09/08 19:47, 4年前 , 2F
程式可以用 < 導入內容,請用 popen() 來處理
09/08 19:47, 2F

09/08 20:42, 4年前 , 3F
你的child process(pid==0那個)要先open 123.dat,然後把
09/08 20:42, 3F

09/08 20:43, 4年前 , 4F
open 123.dat所得的file descriptor(簡稱fd)dup到fd 0去
09/08 20:43, 4F

09/08 20:44, 4年前 , 5F
再execlp,這樣被執行的process的stdin就會是123.dat
09/08 20:44, 5F

09/08 20:45, 4年前 , 6F
dup的方法可以man dup2
09/08 20:45, 6F

09/09 11:46, 4年前 , 7F
感謝各位的幫忙 小弟搞出來了 感謝各位! https://i.imgur.
09/09 11:46, 7F

09/09 11:46, 4年前 , 8F
com/bvgtn72.jpg
09/09 11:46, 8F

09/09 11:47, 4年前 , 9F

09/09 12:07, 4年前 , 10F
你一次用兩個方法,你那個 execlp 的 < 和 123.dat 拿掉,
09/09 12:07, 10F

09/09 12:08, 4年前 , 11F
和 open+dup2拿掉, 照道理 <和123.dat應該是無效的參數,
09/09 12:08, 11F

09/09 12:08, 4年前 , 12F
因為那兩個是shell在解譯並執行效果替wine64輸入導向,由
09/09 12:08, 12F

09/09 12:09, 4年前 , 13F
execlp丟出就變成wine64再轉丟給你的執行檔的文字參數
09/09 12:09, 13F

09/09 12:09, 4年前 , 14F
和 open+dup2拿掉各試一次看看
09/09 12:09, 14F
文章代碼(AID): #1VLsj-b3 (Linux)
文章代碼(AID): #1VLsj-b3 (Linux)