stein@WRC.XEROX.COM (Adam Stein) (05/22/91)
I have been trying to use scandir() with little success. I have included below a piece of code trying to use scandir. The code calls scandir() to get all the files in a directory and then goes to print out the name of each file. The problem is that the namelist given to scandir() comes back empty. I can't get to the filenames. I'm using scandir() because it's easier for scandir() to put together a list of files and I plan on using the select and compare functions that scandir() would call. If anybody knows what I'm doing wrong or has a simple example that works, please let me know. Thanx. Adam Stein stein.wbst129@xerox.com -----Example----------Example----------Example----------Example--------- #include <sys/types.h> #include <sys/dir.h> myroutine() { int numfiles,loop; struct direct *namelist; if((numfiles = scandir(".",&namelist,NULL,NULL)) == -1) { perror("myprogram"); exit(1); } for(loop = 0;loop < numfiles;++loop) printf("Name -> <%s>\n",namelist[loop].d_name); } -- Adam Stein @ Xerox Corporation Email: stein.wbst129@xerox.com stein@arisia.xerox.com Disclaimer: Any/All views expressed ...!uunet!xerox.com!stein.wbst129 here have been proved to be my own. Hopefully one of the above will work.
subbarao@phoenix.Princeton.EDU (Kartik Subbarao) (05/22/91)
>#include <sys/types.h> >#include <sys/dir.h> > >myroutine() >{ > int numfiles,loop; > struct direct *namelist; should be struct direct **namelist; > > if ((numfiles = scandir(".", namelist, NULL, NULL)) == -1) { should be scandir(".", &namelist, NULL, NULL); ... etc > perror("myprogram"); > exit(1); > } > > for(loop = 0; loop < numfiles; ++loop) > printf("Name -> <%s>\n",namelist[loop].d_name); should be namelist[loop]->d_name >} As the man page says. It's a weird man page. -Kartik -- internet% ypwhich subbarao@phoenix.Princeton.EDU -| Internet kartik@silvertone.Princeton.EDU (NeXT mail) SUBBARAO@PUCC.BITNET - Bitnet
jik@athena.mit.edu (Jonathan I. Kamens) (05/22/91)
In article <822@rocksanne.WRC.XEROX.COM>, stein@WRC.XEROX.COM (Adam Stein) writes: |> I have been trying to use scandir() with little success. |> ... |> |> -----Example----------Example----------Example----------Example--------- |> ... |> struct direct *namelist; Here's the problem. Scandir does not create an array of struct direct, it creates an array of struct direct *. Therefore, this declaration should read struct direct **namelist; |> ... |> printf("Name -> <%s>\n",namelist[loop].d_name); Since namelist is now an array of pointers instead of an array of structures, you need to use -> indirection to get at its contents. This line should read printf("Name -> <%s>\n",namelist[loop]->d_name); -- Jonathan Kamens USnail: MIT Project Athena 11 Ashford Terrace jik@Athena.MIT.EDU Allston, MA 02134 Office: 617-253-8085 Home: 617-782-0710