作者bu884 (揚揚)
看板Linux
標題[問題] Linux 使用exec() 和wine
時間Tue Sep 8 19:31:08 2020
各位好,小弟現在有一個測試檔案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://webptt.com/m.aspx?n=bbs/Linux/M.1599564670.A.943.html
1F:推 kenduest: 你用錯函數了,要能夠 io 重導這類,若你呼叫是現成外部 09/08 19:46
2F:→ kenduest: 程式可以用 < 導入內容,請用 popen() 來處理 09/08 19:47
3F:推 bitlife: 你的child process(pid==0那個)要先open 123.dat,然後把 09/08 20:42
4F:→ bitlife: open 123.dat所得的file descriptor(簡稱fd)dup到fd 0去 09/08 20:43
5F:→ bitlife: 再execlp,這樣被執行的process的stdin就會是123.dat 09/08 20:44
6F:→ bitlife: dup的方法可以man dup2 09/08 20:45
8F:→ bu884: com/bvgtn72.jpg 09/09 11:46
10F:→ bitlife: 你一次用兩個方法,你那個 execlp 的 < 和 123.dat 拿掉, 09/09 12:07
11F:→ bitlife: 和 open+dup2拿掉, 照道理 <和123.dat應該是無效的參數, 09/09 12:08
12F:→ bitlife: 因為那兩個是shell在解譯並執行效果替wine64輸入導向,由 09/09 12:08
13F:→ bitlife: execlp丟出就變成wine64再轉丟給你的執行檔的文字參數 09/09 12:09
14F:→ bitlife: 和 open+dup2拿掉各試一次看看 09/09 12:09