I've corrected the confusing comments.
Cheers, Fons.
On Mon, 2002-01-28 at 17:39, Valeri Fine wrote:
>
>
> > Hi Valery,
> >
> > no specific Win32 ifdef's are needed. We don't yet support 64bit
> > files on any platform. In the TFile layer we have forseen that Seek_t
> > can be 64 bit and there is also a hook in the file format saying if
> > it is a 64 bit file or not, but in TFile we still need to make the
> > case for all I/O system methods to be called in 64bit.
>
>
> I made two points:
>
> - the documentation is confusing about "64-bits" and "man lseek
>
> - interface is protected and is not designed for the external use, since it requires
> the user to introduce some system header files in addition.
> Nothing wrong with that but documentation.
>
> The documentation has been proved to confuse the user and should be corrected.
>
> Cheers, Valeri
>
> > -- Fons
> >
> >
> >
> > On Mon, 2002-01-28 at 15:54, Valeri Fine wrote:
> > > ----- Original Message -----
> > > From: "geffroy" <sgeffroy@lasim.univ-lyon1.fr>
> > > To: "Fine Valeri" <fine@bnl.gov>
> > > Sent: Monday, January 28, 2002 8:57 AM
> > > Subject: root under windows
> > >
> > >
> > > > hello
> > > >
> > > > i'm a root user under win2000
> > > > I would like to use the command :
> > > >
> > > > Seek_t TFile::SysSeek(Int_t fd, Seek_t offset, Int_t whence)
> > > >
> > > > but the root manual on-line said that this command use directly the lseek
> > > > system command
> > >
> > lseek() is a POSIX call, to seek on the and Win32 implements it the
> > same way. Look in you online Visual C++ manual.
> >
> > >
> > > ROOT manual doesn't say this method doesn't work under Windows, or
> > > it is for UNIX platform only. (By some reason one doesn't provide
> > > any Windows implementation for 64-bits file system. Why ? )
> > >
> > Like said above its a POSIX call supported by WIn32 too. We don't have
> > yet general support for 64 bit file systems on any platform. All the
> > hooks are there in the file format, but we don't use yet the 64 bit
> > versions of the I/O functions.
> >
> > >
> > > The placement of this method in the TFile class rather TSystem is confusing also.
> > >
> > > Even though on either platform one can use TFile::SysSeek method as ROOT manual describes
> > > the comment there is confusing for Windows user:
> > >
> > > "All arguments like in "man 2 lseek"
> > >
> > > ( http://root.cern.ch/root/htmldoc/TFile.html#TFile:SysSeek )
> > > Many Windows users have no idea what the combination of the words above
> > > "man 2 lseek" does mean.
> > >
> > > It suggests this works properly on UNIX platform only.
> > > On other hande this method is "protected".
> > > This sounds it is not designed to be used by the "regular" user.
> > >
> > > May be the direct explanation of the parameters is more appropriated:
> > >
> > > TFile::SysSeek - Interface to system lseek.
> > >
> > > The method repositions the offset of the file
> > > descriptor "fildes" to the argument "offset" according to the
> > > directive "whence" as follows:
> > >
> > > SEEK_SET
> > > The offset is set to offset bytes.
> > >
> > > SEEK_CUR
> > > The offset is set to its current location plus offset bytes.
> > >
> > > SEEK_END
> > > The offset is set to the size of the file plus offset bytes.
> > >
> > > RETURN VALUES
> > > Upon successful completion, lseek returns the resulting offset location
> > > as measured in bytes from the beginning of the file. Otherwise, a value
> > > of (Seek_t)-1 is returned and errno is set to indicate the error.
> > >
> > >
> > > On other hand to use this method it is not enough to provide TFile class header file, namely
> > > "TFile.h" one has to provide the platform specific system header files also (Why ?)
> > > ( see: TFile.cxx file http://root.cern.ch/root/htmldoc/src/TFile.cxx.html) namely:
> > >
> > > #include <fcntl.h>
> > > #include <errno.h>
> > > #include <sys/stat.h>
> > > #ifndef WIN32
> > > # include <unistd.h>
> > > #else
> > > # define ssize_t int
> > > # include <io.h>
> > > # include <sys/types.h>
> > > #endif
> > >
> > > The comment:
> > >
> > > "... // except that the offset and return value are Long_t to be able to
> > > // handle 64 bit file systems. ..."
> > >
> > > is still confusing.
> > >
> > > [rcas6028] /afs/rhic/star/ROOT/3.02.01/include > grep Seek_t *.h
> > >
> > > Rtypes.h:typedef int Seek_t; //File pointer
> > > Rtypes.h:typedef int Seek_t; //File pointer
> > >
> > > How "int Seek_t" can accomodate 64-bits is unclear.
> > >
> > > Very likely one may ask the Team to create a "cross-platform" interface for this method.
> > > (The right place for such sort of method is TSystem class of course).
> > > Some kind of ROOT-specific enumerate statement would be useful also:
> > >
> > > TFile.h:
> > >
> > > enum {kSeekSet, kSeekCur, kSeekEnd} EFileSeek;
> > >
> > > TFile.cxx:
> > >
> > > static const int gSeekMap[kSeekEnd+1] = {SEEK_SET, SEEK_CUR, SEEK_END};
> > >
> > > Seek_t TFile::SysSeek(Int_t fd, Seek_t offset, EFileSeek whence) {
> > > #ifndef WIN32
> > > return ::lseek(fd, offset, gSeekMap[whence]);
> > > #else
> > > return ::lseek64(fd, offset, gSeekMap[whence]);
> > > #endif
> > > }
> > >
> > > > my question is what is the equivalent for Win2000 ?
> > >
> > > For 32-bits file system one can use TFile::SysSeek "as is"
> > > for 64-bits one can call the "lseek64" directly
> > >
> > > Either way under Window you have to provide "#include <io.h>" yourself
> > > to get your code compiled.
> > >
> > > Hope this helps, Valeri
> > > >
> > > > thank a lot
> > > >
> > > > -------
> > > > Sylvain Geffroy
> > > > http://lasim.univ-lyon1.fr/perso/geffroy/
> > > >
> > --
> > Org: CERN, European Laboratory for Particle Physics.
> > Mail: 1211 Geneve 23, Switzerland
> > E-Mail: Fons.Rademakers@cern.ch Phone: +41 22 7679248
> > WWW: http://root.cern.ch/~rdm/ Fax: +41 22 7679480
> >
--
Org: CERN, European Laboratory for Particle Physics.
Mail: 1211 Geneve 23, Switzerland
E-Mail: Fons.Rademakers@cern.ch Phone: +41 22 7679248
WWW: http://root.cern.ch/~rdm/ Fax: +41 22 7679480
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:40 MET