使用C打开目录
我接受通过命令行输入的路径。
当我这样做时,
dir=opendir(args[1]);
它不会进入循环...即 dir==null
...
如何将命令行输入传递给 dir 指针?
void main(int c,char **args)
{
DIR *dir;
struct dirent *dent;
char buffer[50];
strcpy(buffer, args[1]);
dir = opendir(buffer); //this part
if(dir!=NULL)
{
while((dent=readdir(dir))!=NULL)
printf(dent->d_name);
}
close(dir);
}
./a.out /root/TEST is used to run the program..
./a.out --> to execute the program
/root/TEST --> input by the user i.e valid path
I am accepting the path through command line input.
When I do
dir=opendir(args[1]);
it doesn' t enter the loop...i.e dir==null
...
How do I pass the command line input to dir pointer?
void main(int c,char **args)
{
DIR *dir;
struct dirent *dent;
char buffer[50];
strcpy(buffer, args[1]);
dir = opendir(buffer); //this part
if(dir!=NULL)
{
while((dent=readdir(dir))!=NULL)
printf(dent->d_name);
}
close(dir);
}
./a.out /root/TEST is used to run the program..
./a.out --> to execute the program
/root/TEST --> input by the user i.e valid path
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您确实应该发布您的代码(a),但这里是。从以下内容开始:
您需要检查您的情况,
args[1]
是否已设置并引用实际目录。一个示例运行,其中tmp
是我当前目录之外的子目录,但您可以使用任何有效的目录,给我:testprog tmp
另请注意,您必须传递一个目录,而不是文件。当我执行时:
我得到:
那是因为它是一个文件而不是目录(尽管,如果你偷偷摸摸,你可以尝试使用 diropen(dirname(argv[1]))(如果初始
diropen
失败)。(a) 现在已经纠正了这个问题,但是,由于这个答案已被接受,我将假设这是您传递的内容的问题。
You should really post your code(a), but here goes. Start with something like:
You need to check in your case that
args[1]
is both set and refers to an actual directory. A sample run, withtmp
is a subdirectory off my current directory but you can use any valid directory, gives me:testprog tmp
Note also that you have to pass a directory in, not a file. When I execute:
I get:
That's because it's a file rather than a directory (though, if you're sneaky, you can attempt to use
diropen(dirname(argv[1]))
if the initialdiropen
fails).(a) This has now been rectified but, since this answer has been accepted, I'm going to assume it was the issue of whatever you were passing in.
关于代码段的一些反馈,尽管在大多数情况下,它应该可以工作...
int main
- 标准将main
定义为返回int.
c
和args
通常分别命名为argc
和argv
,但您可以将它们命名为任何名称。这里
args[1]
长度超过 50 个字节,buffer
将无法容纳它,并且您将写入您想要的内存。不应该。我没有理由看到在这里复制缓冲区,因此您可以通过不使用strcpy
来回避这些问题......如果
返回
NULL
,它可以有几个原因:./your_program my directory
,这会失败,因为它尝试opendir("my")
code>)Some feedback on the segment of code, though for the most part, it should work...
int main
- the standard definesmain
as returning anint
.c
andargs
are typically namedargc
andargv
, respectfully, but you are allowed to name them anything...
args[1]
is longer than 50 bytes,buffer
will not be able to hold it, and you will write to memory that you shouldn't. There's no reason I can see to copy the buffer here, so you can sidestep these issues by just not usingstrcpy
......
If this returning
NULL
, it can be for a few reasons:./your_program my directory
, which will fail, because it tries toopendir("my")
)传递给C程序可执行文件的参数只不过是一个字符串(或字符指针)数组,因此在程序访问这些参数之前已经为这些输入参数分配了内存,因此不需要分配缓冲区,这样你就可以也避免程序中的错误处理代码(减少段错误的机会:))。
Parameters passed to the C program executable is nothing but an array of string(or character pointer),so memory would have been already allocated for these input parameter before your program access these parameters,so no need to allocate buffer,and that way you can avoid error handling code in your program as well(Reduce chances of segfault :)).
这是使用
c
实现ls
命令的简单方法。要运行例如./xls /tmp
Here is a simple way to implement
ls
command usingc
. To run use for example./xls /tmp