c - 使用 execvp() 运行 'wc' 可以识别 /home/usr/foo.txt 但不能识别 ~/foo.txt
问题描述
我有一个程序,我想在其中wc
使用 execvp() 运行命令。
重要的位在这里:
char *argvNew[5];
argvNew[0] = "wc";
argvNew[1] = "/home/user/foo.txt";
argvNew[2] = NULL;
execvp(argvNew[0], arvgNew);
这工作得很好,终端显示来自wc
. 但是,当我将行更改为:
argvNew[1] = "~/foo.txt"
我在终端中收到此错误:
wc: '~/foo.txt': No such file or directory
直接从终端运行wc ~/foo.txt
的行为与 running 完全相同wc /home/user/foo.txt
。为什么零件execvp
有问题~/
?
解决方案
波浪号 ( ~
) 扩展仅由 shell 完成/理解 - 它不在 C 程序中扩展。因此execvp
尝试将其解释~
为文件名的一部分(对 的参数wc
)。
您可以做的是HOME
使用文件名获取目录值getenv
并为其添加前缀(例如,使用snprintf
)。
推荐阅读
- java - 当我使用来自 ReplaySubject 的 Observable 时阻止 ChannelHandlerContext
- c# - UWP - 使键盘快捷键调用函数而不使用控件?
- excel - 获得过滤条件的百分位数?
- ibm-doors - 在哪里可以查看 DOORS 中用户的最新编辑历史记录?
- sqlite - 在 Powershell 中使用 SQLite 提取日期在两天之间的数据
- python-2.7 - 从云功能触发数据流管道时,无法从主类执行超过 1 个功能
- r - 多次使用 %in% 的正确方法
- java - IntelliJ 在 Docker 中调试 Java 应用程序
- android - Android通过bottomsheet交互显示MainActivity
- docker-compose - 将变量从 jenkinsfile 传递给 docker-compose 作为环境变量