使用execvp()调用konsole执行nvim时文件异常的问题求助
使用execvp()调用konsole执行nvim时文件异常的问题求助
最近在做GUI程序的时候遇到个头疼的问题:我想用execvp()调用终端程序,拿konsole做测试,打算通过-e参数让它启动nvim打开~/test.txt,结果出怪事了。
直接在Linux shell里跑konsole -e nvim ~/test.txt是完全正常的——之前已经存在的~/test.txt能正常打开编辑,保存后内容也完全符合预期。但用execvp()写代码调用就不行,具体情况如下:
先贴一下我的测试代码:
#include <unistd.h> #include <string> #include <vector> using std::string; using std::vector; int main() { vector<string> strvec = {"konsole", "-e", "nvim", "~/test.txt"}; vector<char*> vec; for (auto& str : strvec) vec.push_back(str.data()); vec.push_back(nullptr); for (auto& arg : vec) printf("%s\n", arg); execvp(vec[0], vec.data()); }
运行这段代码后,控制台打印的参数看起来是对的:
konsole -e nvim ~/test.txt (null) QLayout: Cannot add a null widget to QHBoxLayout/ Process <pid> did not die with SIGHUP
但关键问题是,这时nvim打开的~/test.txt变成了无效文件?明明shell里跑完全正常,用execvp()调用就出问题,我到底哪里弄错了?
内容来源于stack exchange
相关产品推荐
相关产品推荐

