Unix命令"dirname"如何实现?
How to implement the Unix comand "dirname"?
我不知道如何为这个命令编写代码。
我有一些东西但没有用。我认为是 exec 的问题。
有人可以让它工作吗?
我是这个领域的新手。
#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;
}
您缺少 execl()
的参数。应该是:
execl("/usr/bin/dirname", "dirname", argv[1], (char*)NULL);
第一个参数是要执行的命令的路径,其余参数是argv
数组的元素。 argv[0]
是命令的名称。
您也可以使用 execlp()
,它使用 PATH
环境变量搜索命令。那么第一个参数就可以是 "dirname"
。但是你仍然需要在 argv[0]
.
中重复
此外,函数不应在 C 中的其他函数内部定义。isdir()
定义应在之前 main()
,而不是在其内部。
我不知道如何为这个命令编写代码。
我有一些东西但没有用。我认为是 exec 的问题。
有人可以让它工作吗?
我是这个领域的新手。
#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;
}
您缺少 execl()
的参数。应该是:
execl("/usr/bin/dirname", "dirname", argv[1], (char*)NULL);
第一个参数是要执行的命令的路径,其余参数是argv
数组的元素。 argv[0]
是命令的名称。
您也可以使用 execlp()
,它使用 PATH
环境变量搜索命令。那么第一个参数就可以是 "dirname"
。但是你仍然需要在 argv[0]
.
此外,函数不应在 C 中的其他函数内部定义。isdir()
定义应在之前 main()
,而不是在其内部。