1#include <unistd.h> 2#include <limits.h> 3#include <errno.h> 4 5long fpathconf(int fd, int name) 6{ 7 static const short values[] = { 8 [_PC_LINK_MAX] = _POSIX_LINK_MAX, 9 [_PC_MAX_CANON] = _POSIX_MAX_CANON, 10 [_PC_MAX_INPUT] = _POSIX_MAX_INPUT, 11 [_PC_NAME_MAX] = NAME_MAX, 12 [_PC_PATH_MAX] = PATH_MAX, 13 [_PC_PIPE_BUF] = PIPE_BUF, 14 [_PC_CHOWN_RESTRICTED] = 1, 15 [_PC_NO_TRUNC] = 1, 16 [_PC_VDISABLE] = 0, 17 [_PC_SYNC_IO] = 1, 18 [_PC_ASYNC_IO] = -1, 19 [_PC_PRIO_IO] = -1, 20 [_PC_SOCK_MAXBUF] = -1, 21 [_PC_FILESIZEBITS] = FILESIZEBITS, 22 [_PC_REC_INCR_XFER_SIZE] = 4096, 23 [_PC_REC_MAX_XFER_SIZE] = 4096, 24 [_PC_REC_MIN_XFER_SIZE] = 4096, 25 [_PC_REC_XFER_ALIGN] = 4096, 26 [_PC_ALLOC_SIZE_MIN] = 4096, 27 [_PC_SYMLINK_MAX] = SYMLINK_MAX, 28 [_PC_2_SYMLINKS] = 1 29 }; 30 if (name >= sizeof(values)/sizeof(values[0])) { 31 errno = EINVAL; 32 return -1; 33 } 34 return values[name]; 35} 36