首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实现Unix "dirname"?

如何实现Unix "dirname"?
EN

Stack Overflow用户
提问于 2018-01-15 04:42:01
回答 1查看 190关注 0票数 1

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

我有一些东西但现在不起作用了。我认为这是高管的一个问题。

有人能让它起作用吗?

我是这个领域的新手。

代码语言:javascript
复制
#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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-15 05:15:28

你错过了一个与execl()的争论。它应该是:

代码语言:javascript
复制
execl("/usr/bin/dirname", "dirname", argv[1], (char*)NULL);

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

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48257025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档