/* our own header, to be included before all standard system headers */
#ifndef _apue_h
#define _apue_h
#if defined(solaris)
#define _xopen_source 500 /* single unix specification, version 2 for solaris 9 */
#define cmsg_len(x) _cmsg_data_align(sizeof(struct cmsghdr)+(x))
#elif !defined(bsd)
#define _xopen_source 600 /* single unix specification, version 3 */
#endif
#include
/* some systems still require this */
#include
#include
/* for winsize */
#ifndef tiocgwinsz
#include
#endif
#include
/* for convenience */
#include
/* for convenience */
#include
/* for offsetof */
#include
/* for convenience */
#include
/* for convenience */
#include
/* for sig_err */
#define maxline 4096 /* max line length */
/* * default file access permissions for new files.
*/ #define file_mode (s_irusr | s_iwusr | s_irgrp | s_iroth)
/* * default permissions for new directories.
*/ #define dir_mode (file_mode | s_ixusr | s_ixgrp | s_ixoth)
typedef void sigfunc(int); /* for signal handlers */
#if defined(sig_ign) && !defined(sig_err)
#define sig_err ((sigfunc *)-1)
#endif
#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) > (b) ? (a) : (b))
/* * prototypes for our own functions.
*/ char *path_alloc(int *); /* */
long open_max(void); /* */
void clr_fl(int, int); /* */
void set_fl(int, int); /* */
void pr_exit(int); /* */
void pr_mask(const char *); /* */
sigfunc *signal_intr(int, sigfunc *); /* */
int tty_cbreak(int); /* */
int tty_raw(int); /* */
int tty_reset(int); /* */
void tty_atexit(void); /* */
#ifdef echo /* only if
has been included */
struct termios *tty_termios(void); /* */
#endif
void sleep_us(unsigned int); /* */
ssize_t readn(int, void *, size_t); /* */
ssize_t writen(int, const void *, size_t); /* */
void daemonize(const char *); /* */
int s_pipe(int *); /* */
int recv_fd(int, ssize_t (*func)(int,
const void *, size_t));/* */
int send_fd(int, int); /* */
int send_err(int, int,
const char *); /* */
int serv_listen(const char *); /* */
int serv_accept(int, uid_t *); /* */
int cli_conn(const char *); /* */
int buf_args(char *, int (*func)(int,
char **)); /* */
int ptym_open(char *, int); /* */
int ptys_open(char *); /* */
#ifdef tiocgwinsz
pid_t pty_fork(int *, char *, int, const struct termios *,
const struct winsize *); /* */
#endif
int lock_reg(int, int, int, off_t, int, off_t); /* */
#define read_lock(fd, offset, whence, len) /
lock_reg((fd), f_setlk, f_rdlck, (offset), (whence), (len))
#define readw_lock(fd, offset, whence, len) /
lock_reg((fd), f_setlkw, f_rdlck, (offset), (whence), (len))
#define write_lock(fd, offset, whence, len) /
lock_reg((fd), f_setlk, f_wrlck, (offset), (whence), (len))
#define writew_lock(fd, offset, whence, len) /
lock_reg((fd), f_setlkw, f_wrlck, (offset), (whence), (len))
#define un_lock(fd, offset, whence, len) /
lock_reg((fd), f_setlk, f_unlck, (offset), (whence), (len))
pid_t lock_test(int, int, off_t, int, off_t); /* */
#define is_read_lockable(fd, offset, whence, len) /
(lock_test((fd), f_rdlck, (offset), (whence), (len)) == 0)
#define is_write_lockable(fd, offset, whence, len) /
(lock_test((fd), f_wrlck, (offset), (whence), (len)) == 0)
void tell_wait(void); /* parent/child from */
void tell_parent(pid_t);
void tell_child(pid_t);
void wait_parent(void);
void wait_child(void);
#endif /* _apue_h */
unix環境高階程式設計
unix 日曆時間 自1970 年1 月1 日00 00 00 以來的國際標準時間 utc 程序時間 cpu 時間 時鐘時間 程序執行時間的總量。使用者cpu 時間 執行使用者指令時間量。系統cpu 時間 執行核心所經歷時間。命令 time 第三章至第七章 原子操作 任何乙個要求多於1 個函式呼叫的...
unix環境高階程式設計
檔案描述符file descriptor通常是乙個小的非負整數,核心用以標識乙個特定程序正在訪問的檔案。當核心開啟乙個現有檔案或建立乙個新檔案時,它都返回乙個檔案描述符。在讀寫檔案時,可以私用這個檔案描述符。按管理,每當執行乙個新程式時,所有的shell都為其開啟了3個標準檔案描述符 標準輸入,標準...
UNIX環境高階程式設計
本書是被譽為unix程式設計 聖經 的advanced programming in the unix environment一書的更新版。在本書第1版出版後的十幾年中,unix行業已經有了巨大的變化,特別是影響unix程式設計介面的有關標準變化很大。本書在保持了前一版風格的基礎上,根據最新的標準對...