/*
Copyright (c) 1993 Xerox Corporation. All rights reserved.
*/
/*
$Id$
$Date$
*
* PCR - I/O public interface
*
* This monster interface is a list of all the I/O related procs that need
* to exist to support POSIX 1, together with a few PCR-specific
* extensions.
*
* All procs may be called with signals enabled.
*/
#ifndef __PCR_IO_h
#define __PCR_IO_h 1
#include
#include
#include
#include
#include
#include
/*
* directory enumeration
*/
extern PCR_ERes
PCR_IO_EnumDir(
const char *dirName,
PCR_ERes (*callbackProc)(const char *fileName, PCR_Any data),
PCR_Any callbackData,
const PCR_sigset_t *sigMask, PCR_Msec wakeup
);
/*
Invoke callback proc for each file in named directory in arbitrary order.
If callback proc ever returns a result r other than PCR_ERes_okay,
the enumeration terminates returning r.
*/
/*
* Working directory
*/
extern PCR_ERes
PCR_IO_ChDir(
const char *path,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_GetCWD(
char **bufp,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_ApplyToCWD(
PCR_ERes (*proc)(const char *path, PCR_Any data),
PCR_Any data,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_MakeFullPathName(
const char *path,
char **bufp,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
/*
* file and directory create/delete
*/
extern PCR_ERes
PCR_IO_MkDir(
const char *path,
mode_t mode,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_RmDir(
const char *path,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_Open(
const char *path,
int oflag,
mode_t mode,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_MkFIFO(
const char *path,
mode_t mode,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_Link(
const char *path1,
const char *path2,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_Unlink(
const char *path,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_Rename(
const char *old,
const char *new,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern mode_t
PCR_IO_UMask(mode_t mask);
/*
* Access control and other metadata
*/
extern PCR_ERes
PCR_IO_Access(
const char *path,
int amode,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_ChMod(
const char *path,
mode_t mode,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_ChOwn(
const char *path,
uid_t owner,
gid_t group,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_UTime(
const char *path,
struct utimbuf *p,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_Stat(
const char *path,
struct PCR_stat *sbuf,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_FStat(
int fildes,
struct PCR_stat *sbuf,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_FPathConf(
int fildes,
int name,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_PathConf(
const char *path,
int name,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
/*
* I/O operations
*/
extern PCR_ERes
PCR_IO_Pipe(
int fildes[2],
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_Dup(
int fildes,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_Dup2(
int fildes,
int fildes2,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_Close(
int fildes,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_Read(
int fildes, char *buf, unsigned int nbyte,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_Write(
int fildes, char *buf, unsigned int nbyte,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_LSeek(
int fildes, off_t offset, int whence, off_t *where,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_FCntl(
int fildes, int cmd, PCR_Any arg, int *ansp,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
/*
* Wait for ready.
*/
typedef unsigned short PCR_IO_WaitReadyEvents;
#define PCR_IO_WaitReadyEvents_none 0
#define PCR_IO_WaitReadyEvents_IN 0x01
#define PCR_IO_WaitReadyEvents_PRI 0x02
#define PCR_IO_WaitReadyEvents_OUT 0x04
#define PCR_IO_WaitReadyEvents_ERR 0x10
#define PCR_IO_WaitReadyEvents_HUP 0x20
extern PCR_ERes
PCR_IO_WaitReady(
int fildes,
PCR_IO_WaitReadyEvents events,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
/*
Analogous to System V Poll() call, but only one descriptor is allowed.
On success, the result is the returned "revents" value.
The result is only a hint, since a concurrent thread may change
the descriptor's state.
*/
/*
* Non-POSIX, best-effort (may return ENOSYS in some cases) ...
*/
extern PCR_ERes
PCR_IO_Ctl(
int fildes,
int request,
int param,
void *buf,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_Sync(
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_FSync(
int fildes,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_FChMod(
int fildes,
mode_t mode,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_FChOwn(
int fildes,
uid_t owner,
gid_t group,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_Truncate(
const char *path,
off_t length,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_FTruncate(
int fildes,
off_t length,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_SymLink(
const char *name1,
const char *name2,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
extern PCR_ERes
PCR_IO_ReadLink(
const char *path,
char *buf, int bufSize,
const PCR_sigset_t *sigMask,
PCR_Msec wakeup
);
/*
Success => path exists and is a symlink;
EINVAL => path exists but is not a symlink.
Store contents of link in *buf, append trailing null.
Return actual length of link contents (not counting the
trailing null), even if that exceeds bufSize.
*/
/*
* Local/Global descriptor support
*/
extern /* readonly */ int PCR_IO_lfdLim;
extern /* readonly */ int PCR_IO_gfdLim;
extern /* readonly */ int PCR_IO_gfdStd[3];
extern PCR_Bool PCR_IO_FDIsValid(int fd);
#define PCR_IO__FDIsValid(fd) (\
((fd) >= 0) && ((fd) < PCR_IO_gfdLim) )
#define PCR_IO_FDIsValid PCR_IO__FDIsValid
extern PCR_Bool PCR_IO_FDIsLocal(int fd);
#define PCR_IO__FDIsLocal(fd) ((fd) < PCR_IO_lfdLim)
#define PCR_IO_FDIsLocal(fd) PCR_IO__FDIsLocal(fd)
extern PCR_Bool PCR_IO_FDIsValidLocal(int fd);
#define PCR_IO__FDIsValidLocal(fd) (((fd) >= 0) && ((fd) < PCR_IO_lfdLim))
#define PCR_IO_FDIsValidLocal(fd) PCR_IO__FDIsValidLocal(fd)
extern PCR_Bool PCR_IO_FDIsGlobal(int fd);
#define PCR_IO__FDIsGlobal(fd) ((fd) >= PCR_IO_lfdLim)
#define PCR_IO_FDIsGlobal(fd) PCR_IO__FDIsGlobal(fd)
extern PCR_Bool PCR_IO_FDIsValidGlobal(int fd);
#define PCR_IO__FDIsValidGlobal(fd) \
(((fd) >= PCR_IO_lfdLim) && ((fd) < PCR_IO_gfdLim))
#define PCR_IO_FDIsValidGlobal(fd) PCR_IO__FDIsValidGlobal(fd)
extern PCR_ERes
PCR_IO_GlobalFDFromFD(int fd);
/*
This bumps the reference count of the global fd.
Thus, PCR_IO_Close(PCR_IO_GlobalFDFromFD(fd)) is a noop.
*/
#endif /* ! __PCR_IO_h */
/*
$Log$
*/
|