sysutil.h

説明を見る。
00001 #ifndef VSF_SYSUTIL_H
00002 #define VSF_SYSUTIL_H
00003 
00004 /* TODO: these functions need proper documenting! */
00005 
00006 #ifndef VSF_FILESIZE_H
00007 #include "filesize.h"
00008 #endif
00009 
00010 /* Return value queries */
00011 int vsf_sysutil_retval_is_error(int retval);
00012 enum EVSFSysUtilError
00013 {
00014   kVSFSysUtilErrUnknown = 1,
00015   kVSFSysUtilErrADDRINUSE,
00016   kVSFSysUtilErrNOSYS,
00017   kVSFSysUtilErrINTR,
00018   kVSFSysUtilErrINVAL,
00019   kVSFSysUtilErrOPNOTSUPP,
00020   kVSFSysUtilErrEACCES
00021 };
00022 enum EVSFSysUtilError vsf_sysutil_get_error(void);
00023 
00024 /* Signal handling utility functions */
00025 enum EVSFSysUtilSignal
00026 {
00027   kVSFSysUtilSigALRM = 1,
00028   kVSFSysUtilSigTERM,
00029   kVSFSysUtilSigCHLD,
00030   kVSFSysUtilSigPIPE,
00031   kVSFSysUtilSigURG,
00032   kVSFSysUtilSigHUP
00033 };
00034 enum EVSFSysUtilInterruptContext
00035 {
00036   kVSFSysUtilUnknown,
00037   kVSFSysUtilIO
00038 };
00039 typedef void (*vsf_sighandle_t)(void*);
00040 typedef void (*vsf_async_sighandle_t)(int);
00041 typedef void (*vsf_context_io_t)(int, int, void*);
00042 
00043 void vsf_sysutil_install_null_sighandler(const enum EVSFSysUtilSignal sig);
00044 void vsf_sysutil_install_sighandler(const enum EVSFSysUtilSignal,
00045                                     vsf_sighandle_t handler, void* p_private);
00046 void vsf_sysutil_install_async_sighandler(const enum EVSFSysUtilSignal sig,
00047                                           vsf_async_sighandle_t handler);
00048 void vsf_sysutil_default_sig(const enum EVSFSysUtilSignal sig);
00049 void vsf_sysutil_install_io_handler(vsf_context_io_t handler, void* p_private);
00050 void vsf_sysutil_uninstall_io_handler(void);
00051 void vsf_sysutil_check_pending_actions(
00052   const enum EVSFSysUtilInterruptContext context, int retval, int fd);
00053 void vsf_sysutil_block_sig(const enum EVSFSysUtilSignal sig);
00054 void vsf_sysutil_unblock_sig(const enum EVSFSysUtilSignal sig);
00055 
00056 /* Alarm setting/clearing utility functions */
00057 void vsf_sysutil_set_alarm(const unsigned int trigger_seconds);
00058 void vsf_sysutil_clear_alarm(void);
00059 
00060 /* Directory related things */
00061 char* vsf_sysutil_getcwd(char* p_dest, const unsigned int buf_size);
00062 int vsf_sysutil_mkdir(const char* p_dirname, const unsigned int mode);
00063 int vsf_sysutil_rmdir(const char* p_dirname);
00064 int vsf_sysutil_chdir(const char* p_dirname);
00065 int vsf_sysutil_rename(const char* p_from, const char* p_to);
00066 
00067 struct vsf_sysutil_dir;
00068 struct vsf_sysutil_dir* vsf_sysutil_opendir(const char* p_dirname);
00069 void vsf_sysutil_closedir(struct vsf_sysutil_dir* p_dir);
00070 const char* vsf_sysutil_next_dirent(struct vsf_sysutil_dir* p_dir);
00071 
00072 /* File create/open/close etc. */
00073 enum EVSFSysUtilOpenMode
00074 {
00075   kVSFSysUtilOpenReadOnly = 1,
00076   kVSFSysUtilOpenWriteOnly,
00077   kVSFSysUtilOpenReadWrite
00078 };
00079 int vsf_sysutil_open_file(const char* p_filename,
00080                           const enum EVSFSysUtilOpenMode);
00081 /* Fails if file already exists */
00082 int vsf_sysutil_create_file(const char* p_filename);
00083 /* Overwrites if file already exists */
00084 int vsf_sysutil_create_overwrite_file(const char* p_filename);
00085 /* Creates file or appends if already exists */
00086 int vsf_sysutil_create_append_file(const char* p_filename);
00087 /* Creates or appends */
00088 int vsf_sysutil_create_or_open_file(const char* p_filename, unsigned int mode);
00089 void vsf_sysutil_dupfd2(int old_fd, int new_fd);
00090 void vsf_sysutil_close(int fd);
00091 int vsf_sysutil_close_failok(int fd);
00092 int vsf_sysutil_unlink(const char* p_dead);
00093 int vsf_sysutil_write_access(const char* p_filename);
00094 /* Trucate after open */
00095 int vsf_sysutil_truncate(int fd, filesize_t length);
00096 
00097 /* Reading and writing */
00098 void vsf_sysutil_lseek_to(const int fd, filesize_t seek_pos);
00099 filesize_t vsf_sysutil_get_file_offset(const int file_fd);
00100 int vsf_sysutil_read(const int fd, void* p_buf, const unsigned int size);
00101 int vsf_sysutil_write(const int fd, const void* p_buf,
00102                       const unsigned int size);
00103 /* Reading and writing, with handling of interrupted system calls and partial
00104  * reads/writes. Slightly more usable than the standard UNIX API!
00105  */
00106 int vsf_sysutil_read_loop(const int fd, void* p_buf, unsigned int size);
00107 int vsf_sysutil_write_loop(const int fd, const void* p_buf, unsigned int size);
00108 
00109 struct vsf_sysutil_statbuf;
00110 int vsf_sysutil_stat(const char* p_name, struct vsf_sysutil_statbuf** p_ptr);
00111 int vsf_sysutil_lstat(const char* p_name, struct vsf_sysutil_statbuf** p_ptr);
00112 void vsf_sysutil_fstat(int fd, struct vsf_sysutil_statbuf** p_ptr);
00113 void vsf_sysutil_dir_stat(const struct vsf_sysutil_dir* p_dir,
00114                           struct vsf_sysutil_statbuf** p_ptr);
00115 int vsf_sysutil_statbuf_is_regfile(const struct vsf_sysutil_statbuf* p_stat);
00116 int vsf_sysutil_statbuf_is_symlink(const struct vsf_sysutil_statbuf* p_stat);
00117 int vsf_sysutil_statbuf_is_socket(const struct vsf_sysutil_statbuf* p_stat);
00118 int vsf_sysutil_statbuf_is_dir(const struct vsf_sysutil_statbuf* p_stat);
00119 filesize_t vsf_sysutil_statbuf_get_size(
00120   const struct vsf_sysutil_statbuf* p_stat);
00121 const char* vsf_sysutil_statbuf_get_perms(
00122   const struct vsf_sysutil_statbuf* p_stat);
00123 const char* vsf_sysutil_statbuf_get_date(
00124   const struct vsf_sysutil_statbuf* p_stat, int use_localtime);
00125 const char* vsf_sysutil_statbuf_get_numeric_date(
00126   const struct vsf_sysutil_statbuf* p_stat, int use_localtime);
00127 unsigned int vsf_sysutil_statbuf_get_links(
00128   const struct vsf_sysutil_statbuf* p_stat);
00129 int vsf_sysutil_statbuf_get_uid(const struct vsf_sysutil_statbuf* p_stat);
00130 int vsf_sysutil_statbuf_get_gid(const struct vsf_sysutil_statbuf* p_stat);
00131 int vsf_sysutil_statbuf_is_readable_other(
00132   const struct vsf_sysutil_statbuf* p_stat);
00133 const char* vsf_sysutil_statbuf_get_sortkey_mtime(
00134   const struct vsf_sysutil_statbuf* p_stat);
00135 
00136 int vsf_sysutil_chmod(const char* p_filename, unsigned int mode);
00137 void vsf_sysutil_fchown(const int fd, const int uid, const int gid);
00138 void vsf_sysutil_fchmod(const int fd, unsigned int mode);
00139 int vsf_sysutil_readlink(const char* p_filename, char* p_dest,
00140                          unsigned int bufsiz);
00141 
00142 /* Get / unget various locks. Lock gets are blocking. Write locks are
00143  * exclusive; read locks are shared.
00144  */
00145 int vsf_sysutil_lock_file_write(int fd);
00146 int vsf_sysutil_lock_file_read(int fd);
00147 void vsf_sysutil_unlock_file(int fd);
00148 
00149 /* Mapping/unmapping */
00150 enum EVSFSysUtilMapPermission
00151 {
00152   kVSFSysUtilMapProtReadOnly = 1,
00153   kVSFSysUtilMapProtNone
00154 };
00155 void vsf_sysutil_memprotect(void* p_addr, unsigned int len,
00156                             const enum EVSFSysUtilMapPermission perm);
00157 void vsf_sysutil_memunmap(void* p_start, unsigned int length);
00158 
00159 /* Memory allocating/freeing */
00160 void* vsf_sysutil_malloc(unsigned int size);
00161 void* vsf_sysutil_realloc(void* p_ptr, unsigned int size);
00162 void vsf_sysutil_free(void* p_ptr);
00163 
00164 /* Process creation/exit/process handling */
00165 unsigned int vsf_sysutil_getpid(void);
00166 int vsf_sysutil_fork(void);
00167 int vsf_sysutil_fork_failok(void);
00168 void vsf_sysutil_exit(int exit_code);
00169 struct vsf_sysutil_wait_retval
00170 {
00171   int PRIVATE_HANDS_OFF_syscall_retval;
00172   int PRIVATE_HANDS_OFF_exit_status;
00173 };
00174 struct vsf_sysutil_wait_retval vsf_sysutil_wait(void);
00175 int vsf_sysutil_wait_reap_one(void);
00176 int vsf_sysutil_wait_get_retval(
00177   const struct vsf_sysutil_wait_retval* p_waitret);
00178 int vsf_sysutil_wait_exited_normally(
00179   const struct vsf_sysutil_wait_retval* p_waitret);
00180 int vsf_sysutil_wait_get_exitcode(
00181   const struct vsf_sysutil_wait_retval* p_waitret);
00182 
00183 /* Various string functions */
00184 unsigned int vsf_sysutil_strlen(const char* p_text);
00185 char* vsf_sysutil_strdup(const char* p_str);
00186 void vsf_sysutil_memclr(void* p_dest, unsigned int size);
00187 void vsf_sysutil_memcpy(void* p_dest, const void* p_src,
00188                         const unsigned int size);
00189 void vsf_sysutil_strcpy(char* p_dest, const char* p_src, unsigned int maxsize);
00190 int vsf_sysutil_memcmp(const void* p_src1, const void* p_src2,
00191                        unsigned int size);
00192 int vsf_sysutil_strcmp(const char* p_src1, const char* p_src2);
00193 int vsf_sysutil_atoi(const char* p_str);
00194 filesize_t vsf_sysutil_a_to_filesize_t(const char* p_str);
00195 const char* vsf_sysutil_ulong_to_str(unsigned long the_ulong);
00196 const char* vsf_sysutil_filesize_t_to_str(filesize_t the_filesize);
00197 const char* vsf_sysutil_double_to_str(double the_double);
00198 const char* vsf_sysutil_uint_to_octal(unsigned int the_uint);
00199 unsigned int vsf_sysutil_octal_to_uint(const char* p_str);
00200 int vsf_sysutil_toupper(int the_char);
00201 int vsf_sysutil_isspace(int the_char);
00202 int vsf_sysutil_isprint(int the_char);
00203 int vsf_sysutil_isalnum(int the_char);
00204 int vsf_sysutil_isdigit(int the_char);
00205 
00206 /* Socket handling */
00207 struct vsf_sysutil_sockaddr;
00208 struct vsf_sysutil_socketpair_retval
00209 {
00210   int socket_one;
00211   int socket_two;
00212 };
00213 void vsf_sysutil_sockaddr_alloc(struct vsf_sysutil_sockaddr** p_sockptr);
00214 void vsf_sysutil_sockaddr_clear(struct vsf_sysutil_sockaddr** p_sockptr);
00215 void vsf_sysutil_sockaddr_alloc_ipv4(struct vsf_sysutil_sockaddr** p_sockptr);
00216 void vsf_sysutil_sockaddr_alloc_ipv6(struct vsf_sysutil_sockaddr** p_sockptr);
00217 void vsf_sysutil_sockaddr_clone(
00218   struct vsf_sysutil_sockaddr** p_sockptr,
00219   const struct vsf_sysutil_sockaddr* p_src);
00220 int vsf_sysutil_sockaddr_addr_equal(const struct vsf_sysutil_sockaddr* p1,
00221                                     const struct vsf_sysutil_sockaddr* p2);
00222 int vsf_sysutil_sockaddr_is_ipv6(
00223   const struct vsf_sysutil_sockaddr* p_sockaddr);
00224 void vsf_sysutil_sockaddr_set_ipv4addr(struct vsf_sysutil_sockaddr* p_sockptr,
00225                                        const unsigned char* p_raw);
00226 void vsf_sysutil_sockaddr_set_ipv6addr(struct vsf_sysutil_sockaddr* p_sockptr,
00227                                        const unsigned char* p_raw);
00228 void vsf_sysutil_sockaddr_set_any(struct vsf_sysutil_sockaddr* p_sockaddr);
00229 void vsf_sysutil_sockaddr_set_port(struct vsf_sysutil_sockaddr* p_sockptr,
00230                                    unsigned short the_port);
00231 int vsf_sysutil_is_port_reserved(unsigned short port);
00232 int vsf_sysutil_get_ipsock(const struct vsf_sysutil_sockaddr* p_sockaddr);
00233 unsigned int vsf_sysutil_get_ipaddr_size(void);
00234 void* vsf_sysutil_sockaddr_get_raw_addr(
00235   struct vsf_sysutil_sockaddr* p_sockaddr);
00236 const void* vsf_sysutil_sockaddr_ipv6_v4(
00237   const struct vsf_sysutil_sockaddr* p_sockaddr);
00238 const void* vsf_sysutil_sockaddr_ipv4_v6(
00239   const struct vsf_sysutil_sockaddr* p_sockaddr);
00240 int vsf_sysutil_get_ipv4_sock(void);
00241 int vsf_sysutil_get_ipv6_sock(void);
00242 struct vsf_sysutil_socketpair_retval
00243   vsf_sysutil_unix_stream_socketpair(void);
00244 int vsf_sysutil_bind(int fd, const struct vsf_sysutil_sockaddr* p_sockptr);
00245 void vsf_sysutil_listen(int fd, const unsigned int backlog);
00246 void vsf_sysutil_getsockname(int fd, struct vsf_sysutil_sockaddr** p_sockptr);
00247 void vsf_sysutil_getpeername(int fd, struct vsf_sysutil_sockaddr** p_sockptr);
00248 int vsf_sysutil_accept_timeout(int fd, struct vsf_sysutil_sockaddr* p_sockaddr,
00249                                unsigned int wait_seconds);
00250 int vsf_sysutil_connect_timeout(int fd,
00251                                 const struct vsf_sysutil_sockaddr* p_sockaddr,
00252                                 unsigned int wait_seconds);
00253 void vsf_sysutil_dns_resolve(struct vsf_sysutil_sockaddr** p_sockptr,
00254                              const char* p_name);
00255 /* Option setting on sockets */
00256 void vsf_sysutil_activate_keepalive(int fd);
00257 void vsf_sysutil_set_iptos_throughput(int fd);
00258 void vsf_sysutil_activate_reuseaddr(int fd);
00259 void vsf_sysutil_set_nodelay(int fd);
00260 void vsf_sysutil_activate_sigurg(int fd);
00261 void vsf_sysutil_activate_oobinline(int fd);
00262 void vsf_sysutil_activate_linger(int fd);
00263 void vsf_sysutil_deactivate_linger_failok(int fd);
00264 void vsf_sysutil_activate_noblock(int fd);
00265 void vsf_sysutil_deactivate_noblock(int fd);
00266 /* This does SHUT_RDWR */
00267 void vsf_sysutil_shutdown_failok(int fd);
00268 /* And this does SHUT_RD */
00269 void vsf_sysutil_shutdown_read_failok(int fd);
00270 int vsf_sysutil_recv_peek(const int fd, void* p_buf, unsigned int len);
00271 
00272 const char* vsf_sysutil_inet_ntop(
00273   const struct vsf_sysutil_sockaddr* p_sockptr);
00274 const char* vsf_sysutil_inet_ntoa(const void* p_raw_addr);
00275 int vsf_sysutil_inet_aton(
00276   const char* p_text, struct vsf_sysutil_sockaddr* p_addr);
00277 
00278 /* User database queries etc. */
00279 struct vsf_sysutil_user;
00280 struct vsf_sysutil_group;
00281 
00282 struct vsf_sysutil_user* vsf_sysutil_getpwuid(const int uid);
00283 struct vsf_sysutil_user* vsf_sysutil_getpwnam(const char* p_user);
00284 const char* vsf_sysutil_user_getname(const struct vsf_sysutil_user* p_user);
00285 const char* vsf_sysutil_user_get_homedir(
00286   const struct vsf_sysutil_user* p_user);
00287 int vsf_sysutil_user_getuid(const struct vsf_sysutil_user* p_user);
00288 int vsf_sysutil_user_getgid(const struct vsf_sysutil_user* p_user);
00289 
00290 struct vsf_sysutil_group* vsf_sysutil_getgrgid(const int gid);
00291 const char* vsf_sysutil_group_getname(const struct vsf_sysutil_group* p_group);
00292 
00293 /* More random things */
00294 unsigned int vsf_sysutil_getpagesize(void);
00295 unsigned char vsf_sysutil_get_random_byte(void);
00296 unsigned int vsf_sysutil_get_umask(void);
00297 void vsf_sysutil_set_umask(unsigned int umask);
00298 void vsf_sysutil_make_session_leader(void);
00299 void vsf_sysutil_reopen_standard_fds(void);
00300 void vsf_sysutil_tzset(void);
00301 const char* vsf_sysutil_get_current_date(int use_localtime);
00302 void vsf_sysutil_qsort(void* p_base, unsigned int num_elem,
00303                        unsigned int elem_size,
00304                        int (*p_compar)(const void *, const void *));
00305 char* vsf_sysutil_getenv(const char* p_var);
00306 typedef void (*exitfunc_t)(void);
00307 void vsf_sysutil_set_exit_func(exitfunc_t exitfunc);
00308 
00309 /* Syslogging (bah) */
00310 void vsf_sysutil_openlog(void);
00311 void vsf_sysutil_syslog(const char* p_text, int severe);
00312 
00313 /* Credentials handling */
00314 int vsf_sysutil_running_as_root(void);
00315 void vsf_sysutil_setuid(const struct vsf_sysutil_user* p_user);
00316 void vsf_sysutil_setgid(const struct vsf_sysutil_user* p_user);
00317 void vsf_sysutil_setuid_numeric(int uid);
00318 void vsf_sysutil_setgid_numeric(int gid);
00319 int vsf_sysutil_geteuid(void);
00320 int vsf_sysutil_getegid(void);
00321 void vsf_sysutil_seteuid(const struct vsf_sysutil_user* p_user);
00322 void vsf_sysutil_setegid(const struct vsf_sysutil_user* p_user);
00323 void vsf_sysutil_seteuid_numeric(int uid);
00324 void vsf_sysutil_setegid_numeric(int gid);
00325 void vsf_sysutil_clear_supp_groups(void);
00326 void vsf_sysutil_initgroups(const struct vsf_sysutil_user* p_user);
00327 void vsf_sysutil_chroot(const char* p_root_path);
00328 
00329 /* Time handling */
00330 void vsf_sysutil_update_cached_time(void);
00331 long vsf_sysutil_get_cached_time_sec(void);
00332 long vsf_sysutil_get_cached_time_usec(void);
00333 long vsf_sysutil_parse_time(const char* p_text);
00334 void vsf_sysutil_sleep(double seconds);
00335 int vsf_sysutil_setmodtime(const char* p_file, long the_time, int is_localtime);
00336 
00337 #endif /* VSF_SYSUTIL_H */
00338 

Sat Aug 1 13:42:12 2009に生成されました。  doxygen 1.4.7