Ruby 1.9.3p327(2012-11-10revision37606)
|
00001 /************************************************ 00002 00003 fcntl.c - 00004 00005 $Author: nobu $ 00006 created at: Mon Apr 7 18:53:05 JST 1997 00007 00008 Copyright (C) 1997-2001 Yukihiro Matsumoto 00009 00010 ************************************************/ 00011 00012 /************************************************ 00013 = NAME 00014 00015 fcntl - load the C fcntl.h defines 00016 00017 = SYNOPSIS 00018 00019 require "fcntl" 00020 m = s.fcntl(Fcntl::F_GETFL, 0) 00021 f.fcntl(Fcntl::F_SETFL, Fcntl::O_NONBLOCK|m) 00022 00023 = DESCRIPTION 00024 00025 This module is just a translation of the C <fcntl.h> file. 00026 00027 = NOTE 00028 00029 Only #define symbols get translated; you must still correctly 00030 pack up your own arguments to pass as args for locking functions, etc. 00031 00032 ************************************************/ 00033 00034 #include "ruby.h" 00035 #include <fcntl.h> 00036 00037 /* Fcntl loads the constants defined in the system's <fcntl.h> C header 00038 * file, and used with both the fcntl(2) and open(2) POSIX system calls. 00039 * 00040 * Copyright (C) 1997-2001 Yukihiro Matsumoto 00041 * 00042 * Documented by mathew <meta@pobox.com> 00043 * 00044 * = Usage 00045 * 00046 * To perform a fcntl(2) operation, use IO::fcntl in the core classes. 00047 * 00048 * To perform an open(2) operation, use IO::sysopen. 00049 * 00050 * The set of operations and constants available depends upon specific OS 00051 * platform. Some values listed below may not be supported on your system. 00052 * 00053 * The constants supported by Ruby for use with IO::fcntl are: 00054 * 00055 * - F_DUPFD - duplicate a close-on-exec file handle to a non-close-on-exec 00056 * file handle. 00057 * 00058 * - F_GETFD - read the close-on-exec flag of a file handle. 00059 * 00060 * - F_SETFD - set the close-on-exec flag of a file handle. 00061 * 00062 * - FD_CLOEXEC - the value of the close-on-exec flag. 00063 * 00064 * - F_GETFL - get file descriptor flags. 00065 * 00066 * - F_SETFL - set file descriptor flags. 00067 * 00068 * - O_APPEND, O_NONBLOCK, etc (see below) - file descriptor flag 00069 * values for the above. 00070 * 00071 * - F_GETLK - determine whether a given region of a file is locked. 00072 * 00073 * - F_SETLK - acquire a lock on a region of a file. 00074 * 00075 * - F_SETLKW - acquire a lock on a region of a file, waiting if necessary. 00076 * 00077 * - F_RDLCK, F_WRLCK, F_UNLCK - types of lock for the above. 00078 * 00079 * The constants supported by Ruby for use with IO::sysopen are: 00080 * 00081 * - O_APPEND - open file in append mode. 00082 * 00083 * - O_NOCTTY - open tty without it becoming controlling tty. 00084 * 00085 * - O_CREAT - create file if it doesn't exist. 00086 * 00087 * - O_EXCL - used with O_CREAT, fail if file exists. 00088 * 00089 * - O_TRUNC - truncate file on open. 00090 * 00091 * - O_NONBLOCK / O_NDELAY - open in non-blocking mode. 00092 * 00093 * - O_RDONLY - open read-only. 00094 * 00095 * - O_WRONLY - open write-only. 00096 * 00097 * - O_RDWR - open read-write. 00098 * 00099 * - O_ACCMODE - mask to extract read/write flags. 00100 * 00101 * Example: 00102 * 00103 * require 'fcntl' 00104 * 00105 * fd = IO::sysopen('/tmp/tempfile', 00106 * Fcntl::O_WRONLY | Fcntl::O_EXCL | Fcntl::O_CREAT) 00107 * f = IO.open(fd) 00108 * f.syswrite("TEMP DATA") 00109 * f.close 00110 * 00111 */ 00112 void 00113 Init_fcntl() 00114 { 00115 VALUE mFcntl = rb_define_module("Fcntl"); 00116 #ifdef F_DUPFD 00117 rb_define_const(mFcntl, "F_DUPFD", INT2NUM(F_DUPFD)); 00118 #endif 00119 #ifdef F_GETFD 00120 rb_define_const(mFcntl, "F_GETFD", INT2NUM(F_GETFD)); 00121 #endif 00122 #ifdef F_GETLK 00123 rb_define_const(mFcntl, "F_GETLK", INT2NUM(F_GETLK)); 00124 #endif 00125 #ifdef F_SETFD 00126 rb_define_const(mFcntl, "F_SETFD", INT2NUM(F_SETFD)); 00127 #endif 00128 #ifdef F_GETFL 00129 rb_define_const(mFcntl, "F_GETFL", INT2NUM(F_GETFL)); 00130 #endif 00131 #ifdef F_SETFL 00132 rb_define_const(mFcntl, "F_SETFL", INT2NUM(F_SETFL)); 00133 #endif 00134 #ifdef F_SETLK 00135 rb_define_const(mFcntl, "F_SETLK", INT2NUM(F_SETLK)); 00136 #endif 00137 #ifdef F_SETLKW 00138 rb_define_const(mFcntl, "F_SETLKW", INT2NUM(F_SETLKW)); 00139 #endif 00140 #ifdef FD_CLOEXEC 00141 rb_define_const(mFcntl, "FD_CLOEXEC", INT2NUM(FD_CLOEXEC)); 00142 #endif 00143 #ifdef F_RDLCK 00144 rb_define_const(mFcntl, "F_RDLCK", INT2NUM(F_RDLCK)); 00145 #endif 00146 #ifdef F_UNLCK 00147 rb_define_const(mFcntl, "F_UNLCK", INT2NUM(F_UNLCK)); 00148 #endif 00149 #ifdef F_WRLCK 00150 rb_define_const(mFcntl, "F_WRLCK", INT2NUM(F_WRLCK)); 00151 #endif 00152 #ifdef O_CREAT 00153 rb_define_const(mFcntl, "O_CREAT", INT2NUM(O_CREAT)); 00154 #endif 00155 #ifdef O_EXCL 00156 rb_define_const(mFcntl, "O_EXCL", INT2NUM(O_EXCL)); 00157 #endif 00158 #ifdef O_NOCTTY 00159 rb_define_const(mFcntl, "O_NOCTTY", INT2NUM(O_NOCTTY)); 00160 #endif 00161 #ifdef O_TRUNC 00162 rb_define_const(mFcntl, "O_TRUNC", INT2NUM(O_TRUNC)); 00163 #endif 00164 #ifdef O_APPEND 00165 rb_define_const(mFcntl, "O_APPEND", INT2NUM(O_APPEND)); 00166 #endif 00167 #ifdef O_NONBLOCK 00168 rb_define_const(mFcntl, "O_NONBLOCK", INT2NUM(O_NONBLOCK)); 00169 #endif 00170 #ifdef O_NDELAY 00171 rb_define_const(mFcntl, "O_NDELAY", INT2NUM(O_NDELAY)); 00172 #endif 00173 #ifdef O_RDONLY 00174 rb_define_const(mFcntl, "O_RDONLY", INT2NUM(O_RDONLY)); 00175 #endif 00176 #ifdef O_RDWR 00177 rb_define_const(mFcntl, "O_RDWR", INT2NUM(O_RDWR)); 00178 #endif 00179 #ifdef O_WRONLY 00180 rb_define_const(mFcntl, "O_WRONLY", INT2NUM(O_WRONLY)); 00181 #endif 00182 #ifdef O_ACCMODE 00183 rb_define_const(mFcntl, "O_ACCMODE", INT2FIX(O_ACCMODE)); 00184 #else 00185 rb_define_const(mFcntl, "O_ACCMODE", INT2FIX(O_RDONLY | O_WRONLY | O_RDWR)); 00186 #endif 00187 } 00188