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 <string>
35#include <dirent.h>
36#include <unistd.h>
37#include <sys/stat.h>
38#include <sys/statvfs.h>
39#include <sys/types.h>
40
41#if defined(__APPLE__) || defined(__FreeBSD__)
42#include <sys/param.h>
43#include <sys/mount.h>
44#else
45#include <sys/statfs.h>
46#endif
47
50
51struct XrdOucIOVec;
52
55class XrdPosixFile;
56class XrdPosixInfo;
57class XrdPosixAdmin;
58
59//-----------------------------------------------------------------------------
61//-----------------------------------------------------------------------------
62
64{
65public:
66friend class XrdPosixConfig;
67friend class XrdPosixExtra;
68
69//-----------------------------------------------------------------------------
71//-----------------------------------------------------------------------------
72
73static int Access(const char *path, int amode);
74
75//-----------------------------------------------------------------------------
77//-----------------------------------------------------------------------------
78
79static int Close(int fildes);
80
81//-----------------------------------------------------------------------------
83//-----------------------------------------------------------------------------
84
85static int Closedir(DIR *dirp);
86
87//-----------------------------------------------------------------------------
96//-----------------------------------------------------------------------------
97
98static int endPoint(int FD, char *Buff, int Blen);
99
100//-----------------------------------------------------------------------------
102//-----------------------------------------------------------------------------
103
104static int Fstat(int fildes, struct stat *buf);
105
106//-----------------------------------------------------------------------------
108//-----------------------------------------------------------------------------
109
110static int Fsync(int fildes);
111
112static void Fsync(int fildes, XrdPosixCallBackIO *cbp); // Async extension!
113
114//-----------------------------------------------------------------------------
116//-----------------------------------------------------------------------------
117
118static int Ftruncate(int fildes, off_t offset);
119
120//-----------------------------------------------------------------------------
138
139static long long Getxattr (const char *path, const char *name,
140 void *value, unsigned long long size);
141
142//-----------------------------------------------------------------------------
144//-----------------------------------------------------------------------------
145
146static off_t Lseek(int fildes, off_t offset, int whence);
147
148//-----------------------------------------------------------------------------
150//-----------------------------------------------------------------------------
151
152static int Mkdir(const char *path, mode_t mode);
153
154//-----------------------------------------------------------------------------
164//-----------------------------------------------------------------------------
165
166static const int isStream = 0x40000000; // Internal for Open oflag
167
168static int Open(const char *path, int oflag, mode_t mode=0,
169 XrdPosixCallBack *cbP=0);
170
171//-----------------------------------------------------------------------------
173//-----------------------------------------------------------------------------
174
175static DIR* Opendir(const char *path);
176
177//-----------------------------------------------------------------------------
179//-----------------------------------------------------------------------------
180
181static ssize_t Pread(int fildes, void *buf, size_t nbyte, off_t offset);
182
183static void Pread(int fildes, void *buf, size_t nbyte, off_t offset,
184 XrdPosixCallBackIO *cbp); // Async extension!
185
186//-----------------------------------------------------------------------------
188//-----------------------------------------------------------------------------
189
190static ssize_t Pwrite(int fildes, const void *buf, size_t nbyte, off_t offset);
191
192static void Pwrite(int fildes, const void *buf, size_t nbyte, off_t offset,
193 XrdPosixCallBackIO *cbp); // Async extension!
194
195//-----------------------------------------------------------------------------
206//-----------------------------------------------------------------------------
207
208static int QueryChksum(const char *path, time_t &mtime,
209 char *buff, int blen);
210
211//-----------------------------------------------------------------------------
226//-----------------------------------------------------------------------------
227
228static int QueryError(std::string& emsg, int fd=-1, bool reset=true);
229
230static int QueryError(std::string& emsg, DIR* dirP, bool reset=true);
231
232//-----------------------------------------------------------------------------
242//-----------------------------------------------------------------------------
243
244static long long QueryOpaque(const char *path, char *buff, int blen);
245
246//-----------------------------------------------------------------------------
248//-----------------------------------------------------------------------------
249
250static ssize_t Read(int fildes, void *buf, size_t nbyte);
251
252//-----------------------------------------------------------------------------
254//-----------------------------------------------------------------------------
255
256static ssize_t Readv(int fildes, const struct iovec *iov, int iovcnt);
257
258//-----------------------------------------------------------------------------
262//-----------------------------------------------------------------------------
263
264static struct dirent* Readdir (DIR *dirp);
265static struct dirent64* Readdir64(DIR *dirp);
266
267//-----------------------------------------------------------------------------
271//-----------------------------------------------------------------------------
272
273static int Readdir_r (DIR *dirp, struct dirent *entry, struct dirent **result);
274static int Readdir64_r(DIR *dirp, struct dirent64 *entry, struct dirent64 **result);
275
276//-----------------------------------------------------------------------------
278//-----------------------------------------------------------------------------
279
280static int Rename(const char *oldpath, const char *newpath);
281
282//-----------------------------------------------------------------------------
284//-----------------------------------------------------------------------------
285
286static void Rewinddir(DIR *dirp);
287
288//-----------------------------------------------------------------------------
290//-----------------------------------------------------------------------------
291
292static int Rmdir(const char *path);
293
294//-----------------------------------------------------------------------------
296//-----------------------------------------------------------------------------
297
298static void Seekdir(DIR *dirp, long loc);
299
300//-----------------------------------------------------------------------------
302//-----------------------------------------------------------------------------
303
304static int Stat(const char *path, struct stat *buf);
305
306//-----------------------------------------------------------------------------
309//-----------------------------------------------------------------------------
310
311static int Statfs(const char *path, struct statfs *buf);
312
313//-----------------------------------------------------------------------------
315//-----------------------------------------------------------------------------
316
317static int Statvfs(const char *path, struct statvfs *buf);
318
319//-----------------------------------------------------------------------------
321//-----------------------------------------------------------------------------
322
323static long Telldir(DIR *dirp);
324
325//-----------------------------------------------------------------------------
327//-----------------------------------------------------------------------------
328
329static int Truncate(const char *path, off_t offset);
330
331//-----------------------------------------------------------------------------
333//-----------------------------------------------------------------------------
334
335static int Unlink(const char *path);
336
337//-----------------------------------------------------------------------------
347//-----------------------------------------------------------------------------
348
349static void VRead(int fildes, const XrdOucIOVec *readV, int n,
350 XrdPosixCallBackIO *cbp); // Async extension!
351
352static ssize_t VRead(int fildes, const XrdOucIOVec *readV, int n);
353
354//-----------------------------------------------------------------------------
356//-----------------------------------------------------------------------------
357
358static ssize_t Write(int fildes, const void *buf, size_t nbyte);
359
360//-----------------------------------------------------------------------------
362//-----------------------------------------------------------------------------
363
364static ssize_t Writev(int fildes, const struct iovec *iov, int iovcnt);
365
366//-----------------------------------------------------------------------------
369//-----------------------------------------------------------------------------
370
371inline int fdOrigin() {return baseFD;}
372
373static bool isXrootdDir(DIR *dirp);
374
375static bool myFD(int fd);
376
377/* There must be one instance of this object per executable image. Typically,
378 this object is declared in main() or at file level. This is necessary to
379 properly do one-time initialization of the static members. When declaring
380 this object, you can pass the following information:
381 maxfd - maximum number of simultaneous files and directories to support.
382 The value returned by getrlimit() over-rides the passed value
383 unless maxfd is negative. When negative, abs(maxfd) becomes the
384 absolute maximum and shadow file descriptors are not used.
385 maxdir - Ignored, only here for backward compatibility.
386 maxthr - Ignored, only here for backward compatibility.
387*/
388 XrdPosixXrootd(int maxfd=255, int maxdir=0, int maxthr=0);
390
391private:
392
393static int Fault(XrdPosixFile *fp, int ecode, const char *msg=0);
394
395static int Open(const char *path, int oflag, mode_t mode,
396 XrdPosixCallBack *cbP, XrdPosixInfo *infoP);
397static bool OpenCache(XrdPosixFile &file, XrdPosixInfo &Info);
398
399// functions that will be used when XrdEC is invoked
400static int EcRename(const char*, const char*, XrdPosixAdmin&);
401static int EcStat(const char*, struct stat*, XrdPosixAdmin&);
402static int EcUnlink(const char*, XrdPosixAdmin&);
403
404static int baseFD;
405static int initDone;
406};
407#endif
struct stat Stat
Definition XrdCks.cc:49
#define statvfs(a, b)
Definition XrdPosix.hh:100
#define stat(a, b)
Definition XrdPosix.hh:96
#define statfs(a, b)
Definition XrdPosix.hh:98
int emsg(int rc, char *msg)
An abstract class to define a callback for Open() call.
Extended POSIX interface to XRootD.
POSIX interface to XRootD with some extensions, as noted.
static ssize_t Readv(int fildes, const struct iovec *iov, int iovcnt)
Readv() conforms to POSIX.1-2001 readv()
static ssize_t Pread(int fildes, void *buf, size_t nbyte, off_t offset)
Pread() conforms to POSIX.1-2001 pread()
static int Closedir(DIR *dirp)
Closedir() conforms to POSIX.1-2001 closedir()
static void Seekdir(DIR *dirp, long loc)
Seekdir() conforms to POSIX.1-2001 seekdir()
static const int isStream
static int QueryChksum(const char *path, time_t &mtime, char *buff, int blen)
static int Mkdir(const char *path, mode_t mode)
Mkdir() conforms to POSIX.1-2001 mkdir()
static int Unlink(const char *path)
Unlink() conforms to POSIX.1-2001 unlink()
static int Rmdir(const char *path)
Rmdir() conforms to POSIX.1-2001 rmdir()
static void Rewinddir(DIR *dirp)
Rewinddir() conforms to POSIX.1-2001 rewinddir()
static void VRead(int fildes, const XrdOucIOVec *readV, int n, XrdPosixCallBackIO *cbp)
static int Rename(const char *oldpath, const char *newpath)
Rename() conforms to POSIX.1-2001 rename()
static int Close(int fildes)
Close() conforms to POSIX.1-2001 close()
static int Statvfs(const char *path, struct statvfs *buf)
Statvfs() conforms to POSIX.1-2001 statvfs()
static int endPoint(int FD, char *Buff, int Blen)
static ssize_t Write(int fildes, const void *buf, size_t nbyte)
Write() conforms to POSIX.1-2001 write()
static struct dirent * Readdir(DIR *dirp)
static int Readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result)
static ssize_t Writev(int fildes, const struct iovec *iov, int iovcnt)
Writev() conforms to POSIX.1-2001 writev()
static int QueryError(std::string &emsg, int fd=-1, bool reset=true)
static struct dirent64 * Readdir64(DIR *dirp)
static bool myFD(int fd)
static int Ftruncate(int fildes, off_t offset)
Ftruncate() conforms to POSIX.1-2001 ftruncate()
static long Telldir(DIR *dirp)
Telldir() conforms to POSIX.1-2001 telldir()
static bool isXrootdDir(DIR *dirp)
static int Access(const char *path, int amode)
Access() conforms to POSIX.1-2001 access()
static DIR * Opendir(const char *path)
Opendir() conforms to POSIX.1-2001 opendir()
static int Fsync(int fildes)
Fsync() conforms to POSIX.1-2001 fsync()
static long long Getxattr(const char *path, const char *name, void *value, unsigned long long size)
static long long QueryOpaque(const char *path, char *buff, int blen)
static int Statfs(const char *path, struct statfs *buf)
static int Readdir64_r(DIR *dirp, struct dirent64 *entry, struct dirent64 **result)
static ssize_t Read(int fildes, void *buf, size_t nbyte)
Read() conforms to POSIX.1-2001 read()
static int Fstat(int fildes, struct stat *buf)
Fstat() conforms to POSIX.1-2001 fstat()
static off_t Lseek(int fildes, off_t offset, int whence)
Lseek() conforms to POSIX.1-2001 lseek()
static int Open(const char *path, int oflag, mode_t mode=0, XrdPosixCallBack *cbP=0)
static ssize_t Pwrite(int fildes, const void *buf, size_t nbyte, off_t offset)
Pwrite() conforms to POSIX.1-2001 pwrite()
static int Truncate(const char *path, off_t offset)
Telldir() conforms to POSIX.1-2001 telldir()