xrootd
Loading...
Searching...
No Matches
XrdPosixXrootd.hh
Go to the documentation of this file.
1#ifndef __XRDPOSIXXROOTD_H__
2#define __XRDPOSIXXROOTD_H__
3/******************************************************************************/
4/* */
5/* X r d P o s i x X r o o t d */
6/* */
7/* (c) 2010 by the Board of Trustees of the Leland Stanford, Jr., University */
8/* All Rights Reserved */
9/* Produced by Andrew Hanushevsky for Stanford University under contract */
10/* DE-AC02-76-SFO0515 with the Department of Energy */
11/* */
12/* This file is part of the XRootD software suite. */
13/* */
14/* XRootD is free software: you can redistribute it and/or modify it under */
15/* the terms of the GNU Lesser General Public License as published by the */
16/* Free Software Foundation, either version 3 of the License, or (at your */
17/* option) any later version. */
18/* */
19/* XRootD is distributed in the hope that it will be useful, but WITHOUT */
20/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
21/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
22/* License for more details. */
23/* */
24/* You should have received a copy of the GNU Lesser General Public License */
25/* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
26/* COPYING (GPL license). If not, see <http://www.gnu.org/licenses/>. */
27/* */
28/* The copyright holder's institutional names and contributor's names may not */
29/* be used to endorse or promote products derived from this software without */
30/* specific prior written permission of the institution or contributor. */
31/* Modified by Frank Winklmeier to add the full Posix file system definition. */
32/******************************************************************************/
33
34#include <dirent.h>
35#include <unistd.h>
36#include <sys/stat.h>
37#include <sys/statvfs.h>
38#include <sys/types.h>
39
40#if defined(__APPLE__) || defined(__FreeBSD__)
41#include <sys/param.h>
42#include <sys/mount.h>
43#else
44#include <sys/statfs.h>
45#endif
46
49
50struct XrdOucIOVec;
51
54class XrdPosixFile;
55class XrdPosixInfo;
56class XrdPosixAdmin;
57
58//-----------------------------------------------------------------------------
60//-----------------------------------------------------------------------------
61
63{
64public:
65friend class XrdPosixConfig;
66friend class XrdPosixExtra;
67
68//-----------------------------------------------------------------------------
70//-----------------------------------------------------------------------------
71
72static int Access(const char *path, int amode);
73
74//-----------------------------------------------------------------------------
76//-----------------------------------------------------------------------------
77
78static int Close(int fildes);
79
80//-----------------------------------------------------------------------------
82//-----------------------------------------------------------------------------
83
84static int Closedir(DIR *dirp);
85
86//-----------------------------------------------------------------------------
95//-----------------------------------------------------------------------------
96
97static int endPoint(int FD, char *Buff, int Blen);
98
99//-----------------------------------------------------------------------------
101//-----------------------------------------------------------------------------
102
103static int Fstat(int fildes, struct stat *buf);
104
105//-----------------------------------------------------------------------------
107//-----------------------------------------------------------------------------
108
109static int Fsync(int fildes);
110
111static void Fsync(int fildes, XrdPosixCallBackIO *cbp); // Async extension!
112
113//-----------------------------------------------------------------------------
115//-----------------------------------------------------------------------------
116
117static int Ftruncate(int fildes, off_t offset);
118
119//-----------------------------------------------------------------------------
137
138static long long Getxattr (const char *path, const char *name,
139 void *value, unsigned long long size);
140
141//-----------------------------------------------------------------------------
143//-----------------------------------------------------------------------------
144
145static off_t Lseek(int fildes, off_t offset, int whence);
146
147//-----------------------------------------------------------------------------
149//-----------------------------------------------------------------------------
150
151static int Mkdir(const char *path, mode_t mode);
152
153//-----------------------------------------------------------------------------
163//-----------------------------------------------------------------------------
164
165static const int isStream = 0x40000000; // Internal for Open oflag
166
167static int Open(const char *path, int oflag, mode_t mode=0,
168 XrdPosixCallBack *cbP=0);
169
170//-----------------------------------------------------------------------------
172//-----------------------------------------------------------------------------
173
174static DIR* Opendir(const char *path);
175
176//-----------------------------------------------------------------------------
178//-----------------------------------------------------------------------------
179
180static ssize_t Pread(int fildes, void *buf, size_t nbyte, off_t offset);
181
182static void Pread(int fildes, void *buf, size_t nbyte, off_t offset,
183 XrdPosixCallBackIO *cbp); // Async extension!
184
185//-----------------------------------------------------------------------------
187//-----------------------------------------------------------------------------
188
189static ssize_t Pwrite(int fildes, const void *buf, size_t nbyte, off_t offset);
190
191static void Pwrite(int fildes, const void *buf, size_t nbyte, off_t offset,
192 XrdPosixCallBackIO *cbp); // Async extension!
193
194//-----------------------------------------------------------------------------
205//-----------------------------------------------------------------------------
206
207static int QueryChksum(const char *path, time_t &mtime,
208 char *buff, int blen);
209
210//-----------------------------------------------------------------------------
220//-----------------------------------------------------------------------------
221
222static long long QueryOpaque(const char *path, char *buff, int blen);
223
224//-----------------------------------------------------------------------------
226//-----------------------------------------------------------------------------
227
228static ssize_t Read(int fildes, void *buf, size_t nbyte);
229
230//-----------------------------------------------------------------------------
232//-----------------------------------------------------------------------------
233
234static ssize_t Readv(int fildes, const struct iovec *iov, int iovcnt);
235
236//-----------------------------------------------------------------------------
240//-----------------------------------------------------------------------------
241
242static struct dirent* Readdir (DIR *dirp);
243static struct dirent64* Readdir64(DIR *dirp);
244
245//-----------------------------------------------------------------------------
249//-----------------------------------------------------------------------------
250
251static int Readdir_r (DIR *dirp, struct dirent *entry, struct dirent **result);
252static int Readdir64_r(DIR *dirp, struct dirent64 *entry, struct dirent64 **result);
253
254//-----------------------------------------------------------------------------
256//-----------------------------------------------------------------------------
257
258static int Rename(const char *oldpath, const char *newpath);
259
260//-----------------------------------------------------------------------------
262//-----------------------------------------------------------------------------
263
264static void Rewinddir(DIR *dirp);
265
266//-----------------------------------------------------------------------------
268//-----------------------------------------------------------------------------
269
270static int Rmdir(const char *path);
271
272//-----------------------------------------------------------------------------
274//-----------------------------------------------------------------------------
275
276static void Seekdir(DIR *dirp, long loc);
277
278//-----------------------------------------------------------------------------
280//-----------------------------------------------------------------------------
281
282static int Stat(const char *path, struct stat *buf);
283
284//-----------------------------------------------------------------------------
287//-----------------------------------------------------------------------------
288
289static int Statfs(const char *path, struct statfs *buf);
290
291//-----------------------------------------------------------------------------
293//-----------------------------------------------------------------------------
294
295static int Statvfs(const char *path, struct statvfs *buf);
296
297//-----------------------------------------------------------------------------
299//-----------------------------------------------------------------------------
300
301static long Telldir(DIR *dirp);
302
303//-----------------------------------------------------------------------------
305//-----------------------------------------------------------------------------
306
307static int Truncate(const char *path, off_t offset);
308
309//-----------------------------------------------------------------------------
311//-----------------------------------------------------------------------------
312
313static int Unlink(const char *path);
314
315//-----------------------------------------------------------------------------
325//-----------------------------------------------------------------------------
326
327static void VRead(int fildes, const XrdOucIOVec *readV, int n,
328 XrdPosixCallBackIO *cbp); // Async extension!
329
330static ssize_t VRead(int fildes, const XrdOucIOVec *readV, int n);
331
332//-----------------------------------------------------------------------------
334//-----------------------------------------------------------------------------
335
336static ssize_t Write(int fildes, const void *buf, size_t nbyte);
337
338//-----------------------------------------------------------------------------
340//-----------------------------------------------------------------------------
341
342static ssize_t Writev(int fildes, const struct iovec *iov, int iovcnt);
343
344//-----------------------------------------------------------------------------
347//-----------------------------------------------------------------------------
348
349inline int fdOrigin() {return baseFD;}
350
351static bool isXrootdDir(DIR *dirp);
352
353static bool myFD(int fd);
354
355/* There must be one instance of this object per executable image. Typically,
356 this object is declared in main() or at file level. This is necessary to
357 properly do one-time initialization of the static members. When declaring
358 this object, you can pass the following information:
359 maxfd - maximum number of simultaneous files and directories to support.
360 The value returned by getrlimit() over-rides the passed value
361 unless maxfd is negative. When negative, abs(maxfd) becomes the
362 absolute maximum and shadow file descriptors are not used.
363 maxdir - Ignored, only here for backward compatibility.
364 maxthr - Ignored, only here for backward compatibility.
365*/
366 XrdPosixXrootd(int maxfd=255, int maxdir=0, int maxthr=0);
368
369private:
370
371static int Fault(XrdPosixFile *fp, int ecode);
372
373static int Open(const char *path, int oflag, mode_t mode,
374 XrdPosixCallBack *cbP, XrdPosixInfo *infoP);
375static bool OpenCache(XrdPosixFile &file, XrdPosixInfo &Info);
376
377// functions that will be used when XrdEC is invoked
378static int EcRename(const char*, const char*, XrdPosixAdmin*);
379static int EcStat(const char*, struct stat*, XrdPosixAdmin*);
380static int EcUnlink(const char*, XrdPosixAdmin*);
381
382static int baseFD;
383static int initDone;
384};
385#endif
#define statvfs(a, b)
Definition XrdPosix.hh:100
#define stat(a, b)
Definition XrdPosix.hh:96
#define statfs(a, b)
Definition XrdPosix.hh:98
Definition XrdPosixAdmin.hh:47
Definition XrdPosixCallBack.hh:76
An abstract class to define a callback for Open() call.
Definition XrdPosixCallBack.hh:52
Definition XrdPosixConfig.hh:47
Extended POSIX interface to XRootD.
Definition XrdPosixExtra.hh:47
Definition XrdPosixFile.hh:62
POSIX interface to XRootD with some extensions, as noted.
Definition XrdPosixXrootd.hh:63
static ssize_t Write(int fildes, const void *buf, size_t nbyte)
Write() conforms to POSIX.1-2001 write()
static int EcStat(const char *, struct stat *, XrdPosixAdmin *)
static void VRead(int fildes, const XrdOucIOVec *readV, int n, XrdPosixCallBackIO *cbp)
static void Rewinddir(DIR *dirp)
Rewinddir() conforms to POSIX.1-2001 rewinddir()
static int Fstat(int fildes, struct stat *buf)
Fstat() conforms to POSIX.1-2001 fstat()
static int EcRename(const char *, const char *, XrdPosixAdmin *)
static int Statvfs(const char *path, struct statvfs *buf)
Statvfs() conforms to POSIX.1-2001 statvfs()
static int QueryChksum(const char *path, time_t &mtime, char *buff, int blen)
static int Open(const char *path, int oflag, mode_t mode, XrdPosixCallBack *cbP, XrdPosixInfo *infoP)
static const int isStream
Definition XrdPosixXrootd.hh:165
static int Fault(XrdPosixFile *fp, int ecode)
static int Rmdir(const char *path)
Rmdir() conforms to POSIX.1-2001 rmdir()
static int endPoint(int FD, char *Buff, int Blen)
static int Readdir64_r(DIR *dirp, struct dirent64 *entry, struct dirent64 **result)
static int baseFD
Definition XrdPosixXrootd.hh:382
static int Access(const char *path, int amode)
Access() conforms to POSIX.1-2001 access()
static int Fsync(int fildes)
Fsync() conforms to POSIX.1-2001 fsync()
static int Ftruncate(int fildes, off_t offset)
Ftruncate() conforms to POSIX.1-2001 ftruncate()
static int initDone
Definition XrdPosixXrootd.hh:383
static int Statfs(const char *path, struct statfs *buf)
static struct dirent64 * Readdir64(DIR *dirp)
static ssize_t Writev(int fildes, const struct iovec *iov, int iovcnt)
Writev() conforms to POSIX.1-2001 writev()
static bool myFD(int fd)
static DIR * Opendir(const char *path)
Opendir() conforms to POSIX.1-2001 opendir()
static void Pread(int fildes, void *buf, size_t nbyte, off_t offset, XrdPosixCallBackIO *cbp)
static int Mkdir(const char *path, mode_t mode)
Mkdir() conforms to POSIX.1-2001 mkdir()
static int Readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result)
static int Close(int fildes)
Close() conforms to POSIX.1-2001 close()
static ssize_t Pwrite(int fildes, const void *buf, size_t nbyte, off_t offset)
Pwrite() conforms to POSIX.1-2001 pwrite()
static bool OpenCache(XrdPosixFile &file, XrdPosixInfo &Info)
static ssize_t Readv(int fildes, const struct iovec *iov, int iovcnt)
Readv() conforms to POSIX.1-2001 readv()
static bool isXrootdDir(DIR *dirp)
static off_t Lseek(int fildes, off_t offset, int whence)
Lseek() conforms to POSIX.1-2001 lseek()
static int Stat(const char *path, struct stat *buf)
Stat() conforms to POSIX.1-2001 stat()
static long long QueryOpaque(const char *path, char *buff, int blen)
static long long Getxattr(const char *path, const char *name, void *value, unsigned long long size)
XrdPosixXrootd(int maxfd=255, int maxdir=0, int maxthr=0)
static ssize_t Pread(int fildes, void *buf, size_t nbyte, off_t offset)
Pread() conforms to POSIX.1-2001 pread()
static int Unlink(const char *path)
Unlink() conforms to POSIX.1-2001 unlink()
static long Telldir(DIR *dirp)
Telldir() conforms to POSIX.1-2001 telldir()
static void Pwrite(int fildes, const void *buf, size_t nbyte, off_t offset, XrdPosixCallBackIO *cbp)
static ssize_t Read(int fildes, void *buf, size_t nbyte)
Read() conforms to POSIX.1-2001 read()
static ssize_t VRead(int fildes, const XrdOucIOVec *readV, int n)
static int Closedir(DIR *dirp)
Closedir() conforms to POSIX.1-2001 closedir()
static int Rename(const char *oldpath, const char *newpath)
Rename() conforms to POSIX.1-2001 rename()
static int Truncate(const char *path, off_t offset)
Telldir() conforms to POSIX.1-2001 telldir()
static int Open(const char *path, int oflag, mode_t mode=0, XrdPosixCallBack *cbP=0)
int fdOrigin()
Definition XrdPosixXrootd.hh:349
static int EcUnlink(const char *, XrdPosixAdmin *)
static struct dirent * Readdir(DIR *dirp)
static void Seekdir(DIR *dirp, long loc)
Seekdir() conforms to POSIX.1-2001 seekdir()
static void Fsync(int fildes, XrdPosixCallBackIO *cbp)
Definition XrdOucIOVec.hh:41
Definition XrdPosixInfo.hh:40
Definition XrdOucIOVec.hh:65