作者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/cn.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