📄 system.h
字号:
/* system-dependent definitions for fileutils, textutils, and sh-utils packages. Copyright (C) 1989, 1991-2002 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *//* Include sys/types.h before this file. */#if 2 <= __GLIBC__ && 2 <= __GLIBC_MINOR__# if ! defined _SYS_TYPES_Hyou must include <sys/types.h> before including this file# endif#endif#include <sys/stat.h>#if !defined HAVE_MKFIFO# define mkfifo(path, mode) (mknod ((path), (mode) | S_IFIFO, 0))#endif#if HAVE_SYS_PARAM_H# include <sys/param.h>#endif/* <unistd.h> should be included before any preprocessor test of _POSIX_VERSION. */#if HAVE_UNISTD_H# include <unistd.h>#endif#ifndef STDIN_FILENO# define STDIN_FILENO 0#endif#ifndef STDOUT_FILENO# define STDOUT_FILENO 1#endif#ifndef STDERR_FILENO# define STDERR_FILENO 2#endif#if HAVE_LIMITS_H/* limits.h must come before pathmax.h because limits.h on some systems undefs PATH_MAX, whereas pathmax.h sets PATH_MAX. */# include <limits.h>#endif#include "pathmax.h"#if TIME_WITH_SYS_TIME# include <sys/time.h># include <time.h>#else# if HAVE_SYS_TIME_H# include <sys/time.h># else# include <time.h># endif#endif/* Since major is a function on SVR4, we can't use `ifndef major'. */#if MAJOR_IN_MKDEV# include <sys/mkdev.h># define HAVE_MAJOR#endif#if MAJOR_IN_SYSMACROS# include <sys/sysmacros.h># define HAVE_MAJOR#endif#ifdef major /* Might be defined in sys/types.h. */# define HAVE_MAJOR#endif#ifndef HAVE_MAJOR# define major(dev) (((dev) >> 8) & 0xff)# define minor(dev) ((dev) & 0xff)# define makedev(maj, min) (((maj) << 8) | (min))#endif#undef HAVE_MAJOR#if HAVE_UTIME_H# include <utime.h>#endif/* Some systems (even some that do have <utime.h>) don't declare this structure anywhere. */#ifndef HAVE_STRUCT_UTIMBUFstruct utimbuf{ long actime; long modtime;};#endif/* Don't use bcopy! Use memmove if source and destination may overlap, memcpy otherwise. */#if HAVE_STRING_H# if !STDC_HEADERS && HAVE_MEMORY_H# include <memory.h># endif# include <string.h>#else# include <strings.h>#endif#include <errno.h>#ifndef errnoextern int errno;#endif#if HAVE_STDBOOL_H# include <stdbool.h>#elsetypedef enum {false = 0, true = 1} bool;#endif#if HAVE_STDLIB_H# define getopt system_getopt# include <stdlib.h># undef getopt#endif/* The following test is to work around the gross typo in systems like Sony NEWS-OS Release 4.0C, whereby EXIT_FAILURE is defined to 0, not 1. */#if !EXIT_FAILURE# undef EXIT_FAILURE# define EXIT_FAILURE 1#endif#ifndef EXIT_SUCCESS# define EXIT_SUCCESS 0#endif#if HAVE_FCNTL_H# include <fcntl.h>#else# include <sys/file.h>#endif#if !defined SEEK_SET# define SEEK_SET 0# define SEEK_CUR 1# define SEEK_END 2#endif#ifndef F_OK# define F_OK 0# define X_OK 1# define W_OK 2# define R_OK 4#endif/* For systems that distinguish between text and binary I/O. O_BINARY is usually declared in fcntl.h */#if !defined O_BINARY && defined _O_BINARY /* For MSC-compatible compilers. */# define O_BINARY _O_BINARY# define O_TEXT _O_TEXT#endif#ifdef __BEOS__ /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect. */# undef O_BINARY# undef O_TEXT#endif#if O_BINARY# ifndef __DJGPP__# define setmode _setmode# define fileno(_fp) _fileno (_fp)# endif /* not DJGPP */# define SET_MODE(_f, _m) setmode (_f, _m)# define SET_BINARY(_f) do {if (!isatty(_f)) setmode (_f, O_BINARY);} while (0)# define SET_BINARY2(_f1, _f2) \ do { \ if (!isatty (_f1)) \ { \ setmode (_f1, O_BINARY); \ if (!isatty (_f2)) \ setmode (_f2, O_BINARY); \ } \ } while(0)#else# define SET_MODE(_f, _m) (void)0# define SET_BINARY(f) (void)0# define SET_BINARY2(f1,f2) (void)0# define O_BINARY 0# define O_TEXT 0#endif /* O_BINARY */#if HAVE_DIRENT_H# include <dirent.h># define NLENGTH(direct) (strlen((direct)->d_name))#else /* not HAVE_DIRENT_H */# define dirent direct# define NLENGTH(direct) ((direct)->d_namlen)# if HAVE_SYS_NDIR_H# include <sys/ndir.h># endif /* HAVE_SYS_NDIR_H */# if HAVE_SYS_DIR_H# include <sys/dir.h># endif /* HAVE_SYS_DIR_H */# if HAVE_NDIR_H# include <ndir.h># endif /* HAVE_NDIR_H */#endif /* HAVE_DIRENT_H */#if CLOSEDIR_VOID/* Fake a return value. */# define CLOSEDIR(d) (closedir (d), 0)#else# define CLOSEDIR(d) closedir (d)#endif/* Get or fake the disk device blocksize. Usually defined by sys/param.h (if at all). */#if !defined DEV_BSIZE && defined BSIZE# define DEV_BSIZE BSIZE#endif#if !defined DEV_BSIZE && defined BBSIZE /* SGI */# define DEV_BSIZE BBSIZE#endif#ifndef DEV_BSIZE# define DEV_BSIZE 4096#endif/* Extract or fake data from a `struct stat'. ST_BLKSIZE: Preferred I/O blocksize for the file, in bytes. ST_NBLOCKS: Number of blocks in the file, including indirect blocks. ST_NBLOCKSIZE: Size of blocks used when calculating ST_NBLOCKS. */#ifndef HAVE_STRUCT_STAT_ST_BLOCKS# define ST_BLKSIZE(statbuf) DEV_BSIZE# if defined _POSIX_SOURCE || !defined BSIZE /* fileblocks.c uses BSIZE. */# define ST_NBLOCKS(statbuf) \ (S_ISREG ((statbuf).st_mode) \ || S_ISDIR ((statbuf).st_mode) \ ? (statbuf).st_size / ST_NBLOCKSIZE + ((statbuf).st_size % ST_NBLOCKSIZE != 0) : 0)# else /* !_POSIX_SOURCE && BSIZE */# define ST_NBLOCKS(statbuf) \ (S_ISREG ((statbuf).st_mode) \ || S_ISDIR ((statbuf).st_mode) \ ? st_blocks ((statbuf).st_size) : 0)# endif /* !_POSIX_SOURCE && BSIZE */#else /* HAVE_STRUCT_STAT_ST_BLOCKS *//* Some systems, like Sequents, return st_blksize of 0 on pipes. */# define ST_BLKSIZE(statbuf) ((statbuf).st_blksize > 0 \ ? (statbuf).st_blksize : DEV_BSIZE)# if defined hpux || defined __hpux__ || defined __hpux/* HP-UX counts st_blocks in 1024-byte units. This loses when mixing HP-UX and BSD filesystems with NFS. */# define ST_NBLOCKSIZE 1024# else /* !hpux */# if defined _AIX && defined _I386/* AIX PS/2 counts st_blocks in 4K units. */# define ST_NBLOCKSIZE (4 * 1024)# else /* not AIX PS/2 */# if defined _CRAY# define ST_NBLOCKS(statbuf) \ (S_ISREG ((statbuf).st_mode) \ || S_ISDIR ((statbuf).st_mode) \ ? (statbuf).st_blocks * ST_BLKSIZE(statbuf)/ST_NBLOCKSIZE : 0)# endif /* _CRAY */# endif /* not AIX PS/2 */# endif /* !hpux */#endif /* HAVE_STRUCT_STAT_ST_BLOCKS */#ifndef ST_NBLOCKS# define ST_NBLOCKS(statbuf) \ (S_ISREG ((statbuf).st_mode) \ || S_ISDIR ((statbuf).st_mode) \ ? (statbuf).st_blocks : 0)#endif#ifndef ST_NBLOCKSIZE# define ST_NBLOCKSIZE 512#endif#include "sys2.h"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -