(j3.2006) So that I don't need to do stuff already done....

Van Snyder Van.Snyder
Wed Oct 19 20:52:27 EDT 2016


I don't need the entire dirent struct.  All I need are the file type and
the file name.  So I wrote a C wrapper to get just those two members.
Unfortunately, the file type reported in the result from readdir() for a
sym link is that it's a sym link, so I need to use stat() to find out
what the link is linked to.  The result of stat() is also a struct that
is not fully specified by POSIX, so that needs a C wrapper too.

On Wed, 2016-10-19 at 19:28 -0400, Rafik Zurob wrote:
> The issue here is that to read the directory, you need to have the 
> definition of struct dirent, which may vary by platform.  In C/C++, that's 
> ok because you get the right definition by #including <dirent.h>.  But in 
> Fortran code, you need to do one of the following:
> 1. Run the conversion script every time you build on a new platform
> 2. Base your Fortran dirent derived type on the platform you care about 
> and manually change it every time you port to a new platform
> 3. Write a C wrapper function that takes a struct dirent * and returns a 
> struct you define that has the components you need in the order you want, 
> and that has a matching Fortran bind(c) derived type.  Every time you need 
> to read the value of a struct dirent *, you'd need to call the C function 
> to convert to your Fortran derived type.
> 
> Regards
> 
> Rafik
> 
> j3-bounces at mailman.j3-fortran.org wrote on 19/10/2016 09:00:01 AM:
> 
> > From: "Clune, Thomas L. (GSFC-6101)" <thomas.l.clune at nasa.gov>
> > To: fortran standards email list for J3 <j3 at mailman.j3-fortran.org>
> > Cc: Van Snyder <Van.Snyder at jpl.nasa.gov>
> > Date: 19/10/2016 09:00 AM
> > Subject: Re: (j3.2006) So that I don't need to do stuff already done....
> > Sent by: j3-bounces at mailman.j3-fortran.org
> > 
> > Van,
> > 
> > If I understand correctly, Dan Nagle had an intern that wrote a 
> > script to auto generate Fortran wrappers given C header files.   He 
> > seemed fairly confident that the process was robust for ?most? 
> > things and readily repaired for the exceptions.
> > 
> > _ Tom
> > 
> > 
> > 
> > 
> > > On Oct 18, 2016, at 10:28 PM, Bill Long <longb at cray.com> wrote:
> > > 
> > > Seems like a hard way get a list of the files in a directory.  And
> > depends on the file system being POSIX.   Why not do something easy, 
> like
> > > 
> > > program readdir
> > >  implicit none
> > >  character(1000) :: filename
> > >  integer :: u,ios
> > > 
> > >  call execute_command_line ("ls -1 > names.txt")
> > >  open (newunit=u, file="names.txt")
> > >  do 
> > >     read (u,"(a)", iostat=ios) filename
> > >     if (ios /= 0) exit
> > >     write (*,*) trim(filename)
> > >  end do
> > > 
> > > end program readdir
> > > 
> > > 
> > > Cheers,
> > > Bill
> > > 
> > > 
> > > On Oct 18, 2016, at 9:13 PM, Van Snyder <Van.Snyder at jpl.nasa.gov> 
> wrote:
> > > 
> > >> So that I don't need to do stuff that somebody else has almost 
> certainly
> > >> already done...
> > >> 
> > >> Has anybody written interfaces to POSIX routines opendir, readdir and
> > >> closedir, and used them to read the file names in a directory?
> > >> 
> > >> NAG provides wrappers for these routines in f90_unix_dirent (and 
> perhaps
> > >> others do something similar), but since I'm required to use several
> > >> processors I'd prefer something open-source and based on Clause 18.
> > >> 
> > >> 
> > >> _______________________________________________
> > >> J3 mailing list
> > >> J3 at mailman.j3-fortran.org
> > >> http://mailman.j3-fortran.org/mailman/listinfo/j3
> > > 
> > > Bill Long 
> > longb at cray.com
> > > Fortran Technical Support  & 
> > voice:  651-605-9024
> > > Bioinformatics Software Development                     fax: 
> 651-605-9142
> > > Cray Inc./ Cray Plaza, Suite 210/ 380 Jackson St./ St. Paul, MN 55101
> > > 
> > > 
> > > _______________________________________________
> > > J3 mailing list
> > > J3 at mailman.j3-fortran.org
> > > http://mailman.j3-fortran.org/mailman/listinfo/j3
> > 
> > _______________________________________________
> > J3 mailing list
> > J3 at mailman.j3-fortran.org
> > http://mailman.j3-fortran.org/mailman/listinfo/j3
> 
> 





More information about the J3 mailing list