首页 > 解决方案 > 使用 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有问题~/

标签: ccommandexec

解决方案


波浪号 ( ~) 扩展仅由 shell 完成/理解 - 它不在 C 程序中扩展。因此execvp尝试将其解释~为文件名的一部分(对 的参数wc)。

您可以做的是HOME使用文件名获取目录值getenv并为其添加前缀(例如,使用snprintf)。


推荐阅读