【问题标题】:How can I implement functionality like the program which?我怎样才能实现像程序这样的功能?
【发布时间】:2015-07-30 21:03:06
【问题描述】:

我想知道系统上是否安装了程序less。由于我的要求,我不允许直接使用system("which less")。所以我将尝试PATH 变量中的PATHs 并对文件执行stat 以查看是否安装了less。但是如何在我的每个PATHs 中添加更少的内容?我从这段代码开始

pathValue = getenv ("PATH");
if (! pathValue) {
    printf ("'%s' is not set.\n", "PATH");
}
else {
    printf ("'%s' is set to %s.\n", "PATH", pathValue);
}

现在它可以正确打印我的PATH,但我不知道如何继续。你能帮助我吗?我认为我必须标记我的 pathValue,我该怎么做?

$ ./a.out 'PATH' is set to /home/developer/google-cloud-sdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games.

【问题讨论】:

  • google C string append你没有吗?
  • C string append的可能重复
  • @Eregrith 是的,但我认为我必须标记 PATH,
  • 好吧,你用谷歌搜索过“C tokenize string”吗?顺便说一句,如果你想不出关于如何标记字符串的最微弱的想法,我们告诉你的任何事情都不会帮助你。
  • 顺便说一下,这个问题确实有一个有趣的方面,即在*nix-like OS中的目录名可以包含除'/'和'\之外的任何字符0';特别是它可以包含冒号。虽然只有病态的头脑才会有这样的目录,但我并不清楚是否——以及是否:如何——你或which 或 shell 是否会在 PATH 中识别它们。 (好吧,shell 可以始终将 PATH 元素保留在数组中,并让 PATH 成为从数组元素连接的只读变量。但是尝试设置 PATH 的脚本(和程序)会失败。)

标签: c string path strtok stat


【解决方案1】:

我相信,getenv ("PATH"); 返回一个指向字符串的指针,例如,

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

很明显,我们可以看到,不同的目录路径是: 分隔的。所以,

  1. 您可以使用strtok(): 作为分隔符开始标记pathValue。每个生成的令牌都应作为检查文件的目录路径。
  2. 使用stat()检查是否存在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-04
    • 2015-05-31
    • 1970-01-01
    • 2022-12-08
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    相关资源
    最近更新 更多