Sys.h
上传用户:weiyuanprp
上传日期:2020-05-20
资源大小:1169k
文件大小:5k
源码类别:

传真(Fax)编程

开发平台:

C/C++

  1. /* $Id: Sys.h,v 1.1.1.1 2005/11/11 21:32:03 faxguy Exp $ */
  2. /*
  3.  * Copyright (c) 1994-1996 Sam Leffler
  4.  * Copyright (c) 1994-1996 Silicon Graphics, Inc.
  5.  * HylaFAX is a trademark of Silicon Graphics
  6.  *
  7.  * Permission to use, copy, modify, distribute, and sell this software and 
  8.  * its documentation for any purpose is hereby granted without fee, provided
  9.  * that (i) the above copyright notices and this permission notice appear in
  10.  * all copies of the software and related documentation, and (ii) the names of
  11.  * Sam Leffler and Silicon Graphics may not be used in any advertising or
  12.  * publicity relating to the software without the specific, prior written
  13.  * permission of Sam Leffler and Silicon Graphics.
  14.  * 
  15.  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
  16.  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
  17.  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
  18.  * 
  19.  * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
  20.  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
  21.  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  22.  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
  23.  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
  24.  * OF THIS SOFTWARE.
  25.  */
  26. #ifndef _Sys_
  27. #define _Sys_
  28. #include "Types.h"
  29. #include <stdlib.h>
  30. #include <dirent.h>
  31. #include <stdarg.h>
  32. #include <sys/stat.h>
  33. #include <unistd.h>
  34. #include <sys/wait.h>
  35. #include <fcntl.h>
  36. #include <signal.h>
  37. #include <time.h>
  38. #include "port.h" // for anything not in system includes
  39. #if HAS_OSFCN_H
  40. #include <osfcn.h>
  41. #endif
  42. /*
  43.  * Wrapper functions for C library calls.
  44.  *
  45.  * These exist to isolate system dependencies and to insure that
  46.  * proper type casts are done at the call sites.  Note that the
  47.  * actual number of functions in this class could be a lot larger;
  48.  * only those functions that potentially cause portability problems
  49.  * due to missing implicit casts of function parameters are included
  50.  * here.
  51.  */
  52. class Sys {
  53. public:
  54.     static DIR* opendir(const char* dirname)
  55. { return ::opendir(dirname); }
  56.     static int chdir(const char* s) { return ::chdir(s); }
  57.     static int stat(const char* file, struct stat& sb)
  58. { return ::stat(file, &sb); }
  59.     static int fstat(int fd, struct stat& sb)
  60. { return ::fstat(fd, &sb); }
  61.     static bool isRegularFile(const char* filename);
  62.     static bool isFIFOFile(const char* filename);
  63.     static bool isSocketFile(const char* filename);
  64.     static bool isFIFOFile(int fd);
  65.     static bool isCharSpecialFile(const char* filename);
  66.     static bool isCharSpecialFile(const char* filename, struct stat&);
  67.     static int link(const char* file1, const char* file2)
  68. { return ::link(file1, file2); }
  69.     static int rename(const char* file1, const char* file2)
  70. { return ::rename(file1, file2); }
  71.     static int unlink(const char* filename)
  72. { return  ::unlink(filename); }
  73.     static int access(const char* path, int mode)
  74. { return ::access(path, mode); }
  75.     static int chmod(const char* file, mode_t m)
  76. { return ::chmod(file, m); }
  77.     static int chown(const char* file, uid_t u, gid_t g)
  78. { return ::chown(file, u, g); }
  79.     static int mkfifo(const char* path, mode_t mode)
  80. { return ::mkfifo(path, mode); }
  81.     static int open(const char* filename, int flags, mode_t m = 0)
  82. { return ::open(filename, flags, m); }
  83.     static int close(int fd) { return ::close(fd); }
  84.     // NB: char* param to read+write for implicit cast when using fxStr's
  85.     static ssize_t write(int fd, const char *buf, u_int cc)
  86. { return ::write(fd, buf, cc); }
  87.     static ssize_t read(int fd, char* buf, u_int cc)
  88. { return ::read(fd, buf, cc); }
  89.     static time_t now(void) { return ::time(0); }
  90.     static void execv(const char* path, char* const* argv)
  91. #ifdef CONFIG_BADEXECVPROTO
  92. { ::execv(path, (const char**) argv); }
  93. #else
  94. { ::execv(path, argv); }
  95. #endif
  96.     static void execve(const char* path, char* const* argv, char* const* envp)
  97. #ifdef CONFIG_BADEXECVEPROTO
  98. { ::execve(path, (const char**) argv, (const char**) envp); }
  99. #else
  100. { ::execve(path, argv, envp); }
  101. #endif
  102.     static pid_t waitpid(pid_t pid, int& status, int options = 0)
  103. { return ::waitpid(pid, &status, options); }
  104.     static void waitpid(pid_t pid) { ::waitpid(pid, NULL, 0); }
  105.     static int getopt(int argc, char* const* argv, const char* optstring)
  106. #ifdef CONFIG_BADGETOPTPROTO
  107. { return ::getopt(argc, (char**) argv, (char*) optstring); }
  108. #else
  109. { return ::getopt(argc, argv, optstring); }
  110. #endif
  111.     static int gethostname(char* name, int namelen)
  112. { return ::gethostname(name, namelen); }
  113.     static char* mktemp(char* templ) { return ::mktemp(templ); }
  114.     static int mkstemp(char* templ) {
  115.         int fd = ::mkstemp(templ);
  116. #if defined __GLIBC__ && __GLIBC__ <= 2 && __GLIBC_MINOR__ <= 0
  117.         // Hack for older versions of glibc which do not set the file
  118.         // permissions correctly
  119.         if (fchmod(fd, S_IRUSR | S_IWUSR) == -1) return -1;
  120. #endif
  121.         return fd;
  122.     }
  123.     static FILE* tmpfile() { return ::tmpfile(); }
  124.     static FILE* fopen(const char* filename, const char* mode)
  125. { return ::fopen(filename, mode); }
  126.     static int getOpenMax();
  127. };
  128. #endif /* _Sys_ */