c语言 - 如何实现Unix通信"dirname"?



我不知道如何为这个命令制作代码。

我有东西,但没有工作。我认为这是高管的问题。

有人能让它工作吗?

我是这个领域的新手。

#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 parametern");
        execl("dirname",argv[1],NULL);
    }else{
        printf("invalid dir namen");
}
}
return 0;
}

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

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新