【问题标题】:How to implement the Unix comand "dirname"?如何实现 Unix 命令“dirname”?
【发布时间】:2018-01-15 04:42:01
【问题描述】:

我不知道如何为这个命令编写代码。

我有一些东西,但没有工作。我认为是执行官的问题。

有人可以让它工作吗?

我是这个领域的新手。

#include<sys/stat.h>
#include<libgen.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<dirent.h>
#include<stdio.h>

void showArgs(int argc, char *argv[]){
    int i;
    for (i=0;i<argc;i++) {
        printf("Argument is %s ",argv[i]);
    }
}

int main(int argc, char*argv[])
{
int isdir(const char *path) {
   struct stat statbuf;
   if (stat(path, &statbuf) != 0)
       return 0;
   return S_ISDIR(statbuf.st_mode);
}
printf("Program started... \n");
showArgs(argc, argv);
if(argc == 2)
{
    if(isdir(argv[1]))
    {
        printf("Calling dir with parameter\n");
        execl("dirname",argv[1],NULL);
    }else{
        printf("invalid dir name\n");
}
}
return 0;
}

【问题讨论】:

  • 这不起作用怎么办?你看到了什么结果;你能指望什么?另外,您确定简单地调用现有的dirname 程序算作实现它吗?
  • 它不会打印execl("dirname",argv[1],NULL);
  • 它是否打印任何其他代码行?通常,您的程序只会打印您告诉它的内容,例如 printf 语句。
  • isdir() 在同一个main() 函数中定义和调用,它不会给你造成任何问题吗?
  • dirname 出击几乎不能算作实现dirname 的一种方式,至少在我的书中没有。

标签: c unix dirname


【解决方案1】:

您缺少execl() 的参数。应该是:

execl("/usr/bin/dirname", "dirname", argv[1], (char*)NULL);

第一个参数是要执行的命令的路径,剩下的参数是argv数组的元素。而argv[0] 是命令的名称。

您还可以使用execlp(),它使用PATH 环境变量搜索命令。那么第一个参数可以是"dirname"。但是你还是需要在argv[0]重复一遍。

此外,不应在 C 中的其他函数内部定义函数。isdir() 定义应该在 之前 main(),而不是在其中。

【讨论】:

    猜你喜欢
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 2015-05-08
    • 2019-06-11
    • 1970-01-01
    相关资源
    最近更新 更多