Unix 输入和输出"/>
Unix 输入和输出
NIX系统shell使用文件描述符0与进程的标准输入相关联,文件描述符1与标准输出相关联,文件描述符2与标准出错相关联。这是各种shell以及很多应用程序使用的惯例,而与UNIX内核无关,如果不遵守这种惯例,那么很多UNIX系统应用程序就不能正常工作。
在依从POSIX的应用程序中,幻数0、1、2应当替换成符号常量
STDIN_FILENO,
STDOUT_FILENO,
STDERR_FILENO。
这些常量都定义在头文件<unistd.h>中。
freebsd/include/unistd.h
/**-* Copyright (c) 1991, 1993, 1994* The Regents of the University of California. All rights reserved.** Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions* are met:* 1. Redistributions of source code must retain the above copyright* notice, this list of conditions and the following disclaimer.* 2. Redistributions in binary form must reproduce the above copyright* notice, this list of conditions and the following disclaimer in the* documentation and/or other materials provided with the distribution.* 3. Neither the name of the University nor the names of its contributors* may be used to endorse or promote products derived from this software* without specific prior written permission.** THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF* SUCH DAMAGE.** @(#)unistd.h 8.12 (Berkeley) 4/27/95* $FreeBSD$*/#ifndef _UNISTD_H_
#define _UNISTD_H_#include <sys/cdefs.h>
#include <sys/types.h> /** XXX adds too much pollution. */
#include <sys/unistd.h>
#include <sys/_null.h>
#include <sys/_types.h>#ifndef _GID_T_DECLARED
typedef __gid_t gid_t;
#define _GID_T_DECLARED
#endif#ifndef _OFF_T_DECLARED
typedef __off_t off_t;
#define _OFF_T_DECLARED
#endif#ifndef _PID_T_DECLARED
typedef __pid_t pid_t;
#define _PID_T_DECLARED
#endif#ifndef _SIZE_T_DECLARED
typedef __size_t size_t;
#define _SIZE_T_DECLARED
#endif#ifndef _SSIZE_T_DECLARED
typedef __ssize_t ssize_t;
#define _SSIZE_T_DECLARED
#endif#ifndef _UID_T_DECLARED
typedef __uid_t uid_t;
#define _UID_T_DECLARED
#endif#ifndef _USECONDS_T_DECLARED
typedef __useconds_t useconds_t;
#define _USECONDS_T_DECLARED
#endif#define STDIN_FILENO 0 /** standard input file descriptor */
#define STDOUT_FILENO 1 /** standard output file descriptor */
#define STDERR_FILENO 2 /** standard error file descriptor */#if __XSI_VISIBLE || __POSIX_VISIBLE >= 200112
#define F_ULOCK 0 /** unlock locked section */
#define F_LOCK 1 /** lock a section for exclusive use */
#define F_TLOCK 2 /** test and lock a section for exclusive use */
#define F_TEST 3 /** test a section for locks by other procs */
#endif/*** POSIX options and option groups we unconditionally do or don't* implement. This list includes those options which are exclusively* implemented (or not) in user mode. Please keep this list in* alphabetical order.** Anything which is defined as zero below **must** have an* implementation for the corresponding sysconf() which is able to* determine conclusively whether or not the feature is supported.* Anything which is defined as other than -1 below **must** have* complete headers, types, and function declarations as specified by* the POSIX standard; however, if the relevant sysconf() function* returns -1, the functions may be stubbed out.*/
#define _POSIX_BARRIERS 200112L
#define _POSIX_READER_WRITER_LOCKS 200112L
#define _POSIX_REGEXP 1
#define _POSIX_SHELL 1
#define _POSIX_SPAWN 200112L
#define _POSIX_SPIN_LOCKS 200112L
#define _POSIX_THREAD_ATTR_STACKADDR 200112L
#define _POSIX_THREAD_ATTR_STACKSIZE 200112L
#define _POSIX_THREAD_CPUTIME 200112L
#define _POSIX_THREAD_PRIO_INHERIT 200112L
#define _POSIX_THREAD_PRIO_PROTECT 200112L
#define _POSIX_THREAD_PRIORITY_SCHEDULING 200112L
#define _POSIX_THREAD_PROCESS_SHARED -1
#define _POSIX_THREAD_SAFE_FUNCTIONS -1
#define _POSIX_THREAD_SPORADIC_SERVER -1
#define _POSIX_THREADS 200112L
#define _POSIX_TRACE -1
#define _POSIX_TRACE_EVENT_FILTER -1
#define _POSIX_TRACE_INHERIT -1
#define _POSIX_TRACE_LOG -1
#define _POSIX2_C_BIND 200112L /** mandatory */
#define _POSIX2_C_DEV -1 /** need c99 utility */
#define _POSIX2_CHAR_TERM 1
#define _POSIX2_FORT_DEV -1 /** need fort77 utility */
#define _POSIX2_FORT_RUN 200112L
#define _POSIX2_LOCALEDEF -1
#define _POSIX2_PBS -1
#define _POSIX2_PBS_ACCOUNTING -1
#define _POSIX2_PBS_CHECKPOINT -1
#define _POSIX2_PBS_LOCATE -1
#define _POSIX2_PBS_MESSAGE -1
#define _POSIX2_PBS_TRACK -1
#define _POSIX2_SW_DEV -1 /** XXX ??? */
#define _POSIX2_UPE 200112L
#define _V6_ILP32_OFF32 -1
#define _V6_ILP32_OFFBIG 0
#define _V6_LP64_OFF64 0
#define _V6_LPBIG_OFFBIG -1#if __XSI_VISIBLE
#define _XOPEN_CRYPT -1 /** XXX ??? */
#define _XOPEN_ENH_I18N -1 /** mandatory in XSI */
#define _XOPEN_LEGACY -1
#define _XOPEN_REALTIME -1
#define _XOPEN_REALTIME_THREADS -1
#define _XOPEN_UNIX -1
#endif/** Define the POSIX.2 version we target for compliance. */
#define _POSIX2_VERSION 199212L/*** POSIX-style system configuration variable accessors (for the* sysconf function). The kernel does not directly implement the* sysconf() interface; rather, a C library stub translates references* to sysconf() into calls to sysctl() using a giant switch statement.* Those that are marked `user' are implemented entirely in the C* library and never query the kernel. pathconf() is implemented* directly by the kernel so those are not defined here.*/
#define _SC_ARG_MAX 1
#define _SC_CHILD_MAX 2
#define _SC_CLK_TCK 3
#define _SC_NGROUPS_MAX 4
#define _SC_OPEN_MAX 5
#define _SC_JOB_CONTROL 6
#define _SC_SAVED_IDS 7
#define _SC_VERSION 8
#define _SC_BC_BASE_MAX 9 /** user */
#define _SC_BC_DIM_MAX 10 /** user */
#define _SC_BC_SCALE_MAX 11 /** user */
#define _SC_BC_STRING_MAX 12 /** user */
#define _SC_COLL_WEIGHTS_MAX 13 /** user */
#define _SC_EXPR_NEST_MAX 14 /** user */
#define _SC_LINE_MAX 15 /** user */
#define _SC_RE_DUP_MAX 16 /** user */
#define _SC_2_VERSION 17 /** user */
#define _SC_2_C_BIND 18 /** user */
#define _SC_2_C_DEV 19 /** user */
#define _SC_2_CHAR_TERM 20 /** user */
#define _SC_2_FORT_DEV 21 /** user */
#define _SC_2_FORT_RUN 22 /** user */
#define _SC_2_LOCALEDEF 23 /** user */
#define _SC_2_SW_DEV 24 /** user */
#define _SC_2_UPE 25 /** user */
#define _SC_STREAM_MAX 26 /** user */
#define _SC_TZNAME_MAX 27 /** user */#if __POSIX_VISIBLE >= 199309
#define _SC_ASYNCHRONOUS_IO 28
#define _SC_MAPPED_FILES 29
#define _SC_MEMLOCK 30
#define _SC_MEMLOCK_RANGE 31
#define _SC_MEMORY_PROTECTION 32
#define _SC_MESSAGE_PASSING 33
#define _SC_PRIORITIZED_IO 34
#define _SC_PRIORITY_SCHEDULING 35
#define _SC_REALTIME_SIGNALS 36
#define _SC_SEMAPHORES 37
#define _SC_FSYNC 38
#define _SC_SHARED_MEMORY_OBJECTS 39
#define _SC_SYNCHRONIZED_IO 40
#define _SC_TIMERS 41
#define _SC_AIO_LISTIO_MAX 42
#define _SC_AIO_MAX 43
#define _SC_AIO_PRIO_DELTA_MAX 44
#def
更多推荐
Unix 输入和输出
发布评论