[問題] linux使用exec()用wine進行pipe

看板Programming作者 (揚揚)時間4年前 (2020/09/08 19:35), 編輯推噓1(109)
留言10則, 2人參與, 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/Programming/M.1599564953.A.3B7.html

09/08 23:38, 4年前 , 1F
exec* 系列無法用 shell 指令重導向
09/08 23:38, 1F

09/08 23:38, 4年前 , 2F
你要自己 open 開好, dup2 給 fd 0 再 exec
09/08 23:38, 2F

09/08 23:39, 4年前 , 3F
因為 exec* 會取代你目前執行的程式
09/08 23:39, 3F

09/08 23:39, 4年前 , 4F
所以 dup2 到自己身上再 exec 就會繼承下去
09/08 23:39, 4F

09/08 23:40, 4年前 , 5F
這裡有個類似的答案是回給輸出重導向的
09/08 23:40, 5F

09/08 23:40, 4年前 , 6F

09/08 23:40, 4年前 , 7F
因為他是輸出所以是 dup2 到 fd 1
09/08 23:40, 7F

09/08 23:40, 4年前 , 8F
那你是輸入所以要 dup2 到 fd 0
09/08 23:40, 8F

09/09 11:44, 4年前 , 9F
感謝L大 搞出來了! 非常感謝!!
09/09 11:44, 9F

09/09 11:44, 4年前 , 10F
文章代碼(AID): #1VLsoPEt (Programming)
文章代碼(AID): #1VLsoPEt (Programming)