Previous section.

Protocols for Interworking: XNFS, Version 3W
Copyright © 1998 The Open Group

Open-System Interface Semantics over XNFS

Introduction

Many of the interfaces described in the X/Open System Interfaces and Headers Specification (see reference XSH) are directly or indirectly concerned with accessing files stored on the system's file system. This appendix identifies those interfaces which may operate differently when used with XNFS.

Functions with no Semantic Differences lists those functions that show no semantic differences when invoked in an XNFS environment. That is, they behave the same as when running in a local file system environment. Functions with Semantic Differences lists those functions that may show a semantic difference when invoked in an XNFS environment. Semantic Difference Summary for File Access explains the differences that can cause a function to appear in Functions with Semantic Differences . There is only one distinct XNFS error, [ESTALE]. This error occurs when a remote open file or directory is deleted and its file handle becomes invalid. (See File Accessibility Changed after Open .)

Another difference concerning errors is that [EACCES] and [EPERM] may occur in unexpected situations due to the stateless nature of NFS. (See the discussions in UID Mapping by Server , Execution of Set-user-ID Programs , File Attributes Changed after Open and Directory Caching .)

In all operations that modify a file or directory, the error [EROFS] may be returned. (See the discussion in Access to Read-Only File Systems for more information.)

For a complete list of the non-NFS related errors, as well as the mechanism by which a process can ascertain an error return code, see Section 2.3, Error Numbers in the X/Open System Interfaces and Headers Specification (see reference XSH).

Functions with no Semantic Differences

The following functions have no change over XNFS:

Functions with no Semantic Differences
a64l() abs() acos()
acosh() advance() alarm()
asctime() asctime_r() asin()
asinh() assert() atanh()
atexit() atof() atoi()
atol() basename() bcmp()
bcopy() brk() bsd_signal()
bsearch() btowc() bzero()
calloc() catclose() cbrt()
ceil() cfgetispeed() cfgetospeed()
cfsetispeed() cfsetospeed() clearerr()
clock() clock_getres() clock_gettime()
clock_settime() closedir() closelog()
compile() confstr() cos()
cosh() crypt() ctermid()
ctime() ctime_r() dbm_clearerr()
dbm_error() difftime() diname()
div() drand48() dup()
ecvt() encrypt() endgrent()
endpwent() erand48() erf()
erfc() exp() expm1()
fabs() fdopen() fileno()
floor() fmod() fnmatch()
fork() mblen() free()
frexp() ftime() gamma()
getcontext() gcvt() getdtablesize()
getegid() getenv() geteuid()
getgid() getgroups() gethostid()
getitimer() getmsg() getopt()
getpagesize() getpass() getpgid()
getpgrp() getpid() getpmsg()
getppid() getpriority() getrlimit()
getrusage() getsid() getsubopt()
gettimeofday() getuid() globfree()
gmtime() gmtime_r() grantpt()
hcreate() hdestroy() hsearch()
hypot() iconv() iconv_close()
ilogb() index() initstate()
insque() ioctl() isalnum()
isalpha() isascii() isastream()
iscntrl() isdigit() isgraph()
islower() isnan() isprint()
ispunct() isspace() isupper()
iswalnum() iswcntrl() iswctype()
iswdigit() iswgraph() iswlower()
iswprint() iswpunct() iswspace()
iswupper() iswxdigit() isxdigit()
j0() j1() jn()
jrand48() l64a() labs()
ldiv() lcong48() ldexp()
lfind() lgamma() localeconv()
localtime() localtime_r() log()
logb() log1p() log10()
logb() longjump() lrand48()
lsearch() makecontext() malloc()
mblen() mbrlen() mbrtowc()
mbsinit() mbsrtowcs() mbstowcs()
mbtowc() memccpy() memchr()
memcmp() memcpy() memmove()
memprotect() memset() mktime()
mlock() mlockall() modf()
mq_close() mq_getattr() mq_notify()
mq_open() mq_receive() mq_send()
mq_setattr() mq_unlink() mrand48()
msgctl() msgget() msgrcv()
msgsnd() munlock() munlockall()
nanosleep() openlog() nextafter()
nice() nl_langinfo() nrand48()
pause() pclose() pipe()
poll() pow() pthread_attr_setstacksize()
pthread_atfork() pthread_attr_destroy() pthread_attr_getdetachstate()
pthread_attr_getinheritsched() pthread_attr_getschedparam() pthread_attr_getschedpolicy()
pthread_attr_getscope() pthread_attr_getstackaddr() pthread_attr_getstacksize()
pthread_attr_init() pthread_attr_setdetachstate() pthread_attr_setinheritsched()
pthread_attr_setschedparam() pthread_attr_setschedpolicy() pthread_attr_setscope()
pthread_attr_setstackaddr() pthread_cleanup_pop() pthread_cleanup_push()
pthread_cond_broadcast() pthread_cond_destroy() pthread_cond_init()
pthread_cond_signal() pthread_cond_timedwait() pthread_cond_wait()
pthread_condattr_destroy() pthread_condattr_getpshared() pthread_condattr_init()
pthread_condattr_setpshared() pthread_create() pthread_detach()
pthread_equal() pthread_getschedparam() pthread_getspecific()
pthread_key_create() pthread_key_delete() pthread_kill()
pthread_mutex_destroy() pthread_mutex_getprioceiling() pthread_mutex_init()
pthread_mutex_lock() pthread_mutex_setprioceiling() pthread_mutex_trylock()
pthread_mutex_unlock() pthread_mutexattr_destroy() pthread_mutexattr_getprioceiling()
pthread_mutexattr_getprotocol() pthread_mutexattr_getpshared() pthread_mutexattr_init()
pthread_mutexattr_setprioceiling() pthread_mutexattr_setprotocol() pthread_mutexattr_setpshared()
pthread_once() pthread_self() pthread_setcancelstate()
pthread_setcanceltype() pthread_setschedparam() pthread_setspecific()
pthread_sigmask() ptsname() putenv()
putmsg() putpmsg() qsort()
raise() rand() random()
realloc() re_comp() re_exec()
regcmp() regcomp() regex()
regexec() regerror() regfree()
remainder() remque() rewind()
rindex() rint() sbrk()
scalb() sched_get_priority_max() sched_get_priority_min()
sched_getparam() sched_getscheduler() sched_rr_get_interval()
sched_setparam() sched_setscheduler() sched_yield()
seed48() seekdir() select()
sem_close() semctl() semget()
sem_getvalue() sem_init() semop()
sem_open() sem_post() sem_trywait()
sem_unlink() sem_wait() setbuf()
setcontext() setgid() setgrent()
setitimer() setjmp() setkey()
setlocale() setlogmask() setpgid()
setpgrp() setpriority() setpwent()
setregid() setreuid() setrlimit()
setsid() setstate() setuid()
setutxent() setvbuf() shmat()
shmctl() shmdt() shmget()
shm_open() shm_unlink() sigaction()
sigaddset() sigdelset() sigemptyset()
sigfillset() sighold() sigignore()
siginterrupt() sigismember() siglongjmp()
signal() signalstack() sigpause()
sigqueue() sigrelse() sigstack()
sigpending() sigprocmask() sigset()
sigsetjmp() sigsuspend() sigtimedwait()
sigwaitinfo() sin() sinh()
sleep() snprintf() sprintf()
sqrt() srand() srand48()
srandom() sscanf() step()
strcasecmp() strcat() strchr()
strcmp() strcoll() strcpy()
strcspn() strdup() strerror()
strfmon() strftime() strlen()
strncasecmp() strncat() strncmp()
strncpy() strpbrk() strptime()
strrchr() strspn() strstr()
strtod() strtok() strtol()
strtoul() strxfrm() swab()
swapcontext() swprintf() swscanf()
sysconf() syslog() tan()
atan() tanh() atan2()
tcdrain() tcflow() tcflush()
tcgetattr() tcgetpgrp() tcgetsid()
tcsendbreak() tcsetattr() tcsetpgrp()
tdelete() telldir() tfind()
time() timer_create() timer_delete()
timer_getoverrun() timer_gettime() timer_settime()
times() toascii() _tolower()
tolower() _toupper() toupper()
towctrans() towlower() towupper()
tsearch() twalk() tzset()
ualarm() ulimit() ulockpt()
umask() uname() ungetc()
ungetwc() usleep() valloc()
vfork() vsnprintf() vsprintf()
vswprintf() vwprintf() wait()
wait3() waitid() waitpid()
wcrtomb() wcscat() wcschr()
wcscmp() wcscoll() wcscpy()
wcscspn() wcsftime() wcslen()
wcsncat() wcsncmp() wcsncpy()
wcspbrk() wcsrchr() wcsrtombs()
wcsspn() wcsstr() wcstod()
wcstok() wcstol() wcstombs()
wcstoul() wcswcs() wcswidth()
wcsxfrm() wctob() wctomb()
wctrans() wctype() wcwidth()
wmemchr() wmemcmp() wmemcpy()
wmemmove() wmemset() wordexp()
wordfree() wprintf() wscanf()
y0() y1() yn()

It should be noted that the functions which provide inter-process communications via message queues, shared memory and semaphores all use a key_t to generate the corresponding inter-process communication channel. Objects of type key_t are not transferable between different systems and inter-process communications associated with these keys are not available across an NFS system.

Functions with Semantic Differences

The following functions have semantic differences over XNFS:

Functions with Semantic Differences
abort() access() aio_cancel()
aio_error() aio_fsync() aio_read()
aio_return() aio_suspend() aio_write()
catgets() catopen() chdir()
chmod() chown() chroot()
close() creat() cuserid()
dbm_close() dbm_delete() dbm_fetch()
dbm_firstkey() dbm_nextkey() dbm_open()
dbm_store() dlclose() dlerror()
dlopen() dlsym() dup2()
endutxent() exec() exit()
fattach() fchdir() fchmod()
fchown() fclose() fcntl()
fdatasync() fdetach() ferror()
feof() fflush() fgetc()
getc_unlocked() getchar_unlocked() getgrgid_r()
getgrnam_r() getlogin_r() fgetpos()
getpwnam_r() getpwuid_r() fgets()
fgetwc() flockfile() fmtmsg()
fopen() fpathconf() fprintf()
fputc() fputs() fputwc()
fputws() fread() freopen()
fscanf() fseek() fsetpos()
fstat() fstatvfs() fsync()
ftell() ftrylockfile() ftw()
funlockfile() fwide() fwprintf()
fwrite() fwscanf() getc()
getchar() getcwd() getdate()
getgrent() getgrgid() getgrnam()
getlogin() getpwent() getpwnam()
getpwuid() gets() getutxent()
getutxid() getutxline() getw()
getwc() getwd() getwchar()
fgetws() fseeko() ftello()
ftok() ftruncate() glob()
iconv_open() isatty() kill()
killpg() lchown() link()
lio_listio() lockf() lseek()
lstat() mkdir() mknod()
mkfifo() mkstemp() mktemp()
mmap() msync() munmap()
nftw() open() opendir()
pathconf() perror() popen()
pread() printf() pthread_cancel()
pthread_exit() pthread_join() pthread_testcancel()
putc() putc_unlocked() putchar()
putchar_unlocked() puts() pututxline()
putw() putwc() putwchar()
pwrite() read() readdir()
readdir_r() readlink() readv()
realpath() remove() rename()
rewinddir() rmdir() scanf()
stat() statvfs() symlink()
sync() system() tempnam()
tmpfile() tmpnam() truncate()
ttyname() ttyname_r() ttyslot()
unlink() utime() utimes()
vfprintf() vfwprintf() vprintf()
write() writev()  

Where the semantic difference described only applies to the XNFS Issue 3W Specification this is identified by shading of the appropriate text. Semantic differences which do not contain this code marking are applicable to both XNFS Issue 3 and XNFS Issue 3W Specifications.


Why not acquire a nicely bound hard copy?
Click here to return to the publication details or order a copy of this publication.

Contents Next section Index