[问题] Linux 使用exec() 和wine

楼主: bu884 (扬扬)   2020-09-08 19:31:08
各位好,小弟现在有一个测试档案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
作者: kenduest (小州)   2020-09-08 19:46:00
你用错函数了,要能够 io 重导这类,若你呼叫是现成外部程式可以用 < 导入内容,请用 popen() 来处理
作者: bitlife (BIT一生)   2020-09-08 20:42:00
你的child process(pid==0那个)要先open 123.dat,然后把open 123.dat所得的file descriptor(简称fd)dup到fd 0去再execlp,这样被执行的process的stdin就会是123.datdup的方法可以man dup2
楼主: bu884 (扬扬)   2020-09-09 11:46:00
感谢各位的帮忙 小弟搞出来了 感谢各位! https://i.imgur.com/bvgtn72.jpghttps://i.imgur.com/WLIGbXd.jpg
作者: bitlife (BIT一生)   2020-09-09 12:07:00
你一次用两个方法,你那个 execlp 的 < 和 123.dat 拿掉,和 open+dup2拿掉, 照道理 <和123.dat应该是无效的参数,因为那两个是shell在解译并执行效果替wine64输入导向,由execlp丢出就变成wine64再转丢给你的执行档的文字参数和 open+dup2拿掉各试一次看看

Links booklink

Contact Us: admin [ a t ] ucptt.com