UNIX環境高階程式設計-概述
檔案I/O
基本的系統呼叫函式 open,create,close,lseek,read,write
以及原子性的pread,pwrite
複製檔案描述符 dup
同步重新整理fsync,fdatasync,sync
更改已經開啟的檔案屬性 fcntl,雜物箱 ioctl
開啟檔案的核心資料結構,/dev/fd
檔案型別
獲取檔案型別stat函式和stat結構體
測試檔案是否開啟,寫入,執行政策 access
更改訪問許可權chmod,更改檔案的使用者和ID和組ID chown
檔案截斷truncate,硬連結link,刪除目錄unlink,remove
重新命名rename,軟連結symlink,開啟符號連結readlink
更改檔案的訪問時間futimens,建立目錄mkdir,刪除空目錄rmdir
更改當前工作目錄chdir,讀目錄opendir
標準I/O
設定流重定向 fwide,設定緩衝區setbuf,全緩衝,行緩衝,不緩衝
fflush,fopen,fclose
一次讀一個位元組getc,fgetc,getchar
錯誤輸出ferror,feor
將字元再送回流中ungetc
輸出 putc,fputc,putchar
每次一行I/O fgets,gets,fputs,puts
執行二進位制 fread,fwrite,定位標準I/O ftell,fseek,rewind,ftello,fseeko
格式化輸出 printf,vprintf
格式化輸入 scanf,vscanf
獲取檔案描述符 fileno,臨時檔案tmpnam,mkdtemp
建立記憶體流 fememopen
程序環境
退出函式exit,_Exit,_exit
註冊退出的hook函式atexit
環境表int main(int argc, char *argv[], char *envp[])
動態記憶體分配malloc,calloc,realloc,free
獲取環境變數getenv
設定環境變數putenv,setenv,unsetenv
跨函式的跳轉setjmp,longjmp,jmp_buf結構體
設定獲取資源限制 getrlimit,setrlimit,rlimit結構體
程序控制
返回程序標示符 getpid,getppid,
getuid,geteuid,getgid,getegid
for,vfkor,clone
wait,waitpid,waitid,wait3,wait4
execve系列函式
設定實際使用者ID和有效使用者ID setuid,setgid
system-類似fork+exec,直譯器檔案
程序會計 acct結構體,獲取使用者登入名getlogin
nice,getpriority,setpriority
程序的系統CPU時間 times,tms結構體
程序關係
返回呼叫程序的程序組ID getpgrp,getpgid
建立新會話sesid,getsid,tcgetpgrp,tcsetpgrp,tcgetsid
終端登陸 execle("/bin/login", "login" "-p", username, (char*)0, envp)
網路登陸 init->fork呼叫->inetd,inetd接受到客戶端的telnet->fork呼叫
子程序exec啟動telnetd處理使用者邏輯
程序組是一個或多個程序的集合,會話是一個或多個程序組的集合
作業控制,前臺程序,後臺程序,pstree,孤兒程序組
訊號
signal函式
kill,raise,alarm,pause,abort
訊號集函式sigemptyset,sigfillset,sigaddset,sigdelset,sigismember
阻塞或遮蔽一組訊號 sigprocmask
顯示未決的訊號集sigpending
sigaction函式,高階版
sigsetjmp,siglongjmp
sigsuspend
訊號排隊,不可靠的訊號
sleep,nanosleep,
sigqueue 可以傳送額外資訊
和訊號對應的字串psignal
訊號資訊psiginfo
執行緒
pthread_equal,pthread_self
pthread_create(pthread_t,pthread_attr_t,*fun,*arg)
pthread_exit,pthread_join,pthread_cancel
註冊清理函式 pthread_cleanup_push,pthread_cleanup_pop
pthread_detach
互斥量,pthread_mutex_t 結構體
pthread_mutex_init,pthread_mutex_destroy,pthread_mutex_lock,pthread_mutex_trylock
pthread_mutex_unlock,pthread_mutex_timedlock
讀寫鎖,pthread_rwlock_t 結構體
pthread_rwlock_init,pthread_rwlock_destroy,pthread_rwlock_rdlock,pthread_rwlock_wrlock
pthread_rwlock_unlock,pthread_rwlock_tryrdlock,pthread_rwlock_trywrlock,pthread_rwlock_timerdlock,pthread_rwlock_timewrlock
條件變,pthread_cond_t 結構體
pthread_cond_init,pthread_cond_destroy,pthread_cond_wait,pthread_cond_timedwait
pthread_cond_signal,pthread_cond_broadcast
自旋鎖,pthread_spinlock_t 結構體
pthread_spin_init,pthread_spin_destroy
pthread_spin_lock,pthread_spin_trylock,pthread_spin_unlock
屏障,pthread_barrier_t 結構體
pthread_barrier_init,pthread_barrier_destroy,pthread_barrier_wait
執行緒控制
執行緒屬性
pthread_attr_t 結構體
pthread_attr_init,pthread_attr_destroy
分離屬性 pthread_attr_getdetachstate,pthread_attr_setdetachstate
執行緒堆疊 pthread_attr_getstack,pthread_attr_setstack
執行緒棧大小 pthread_attr_getstacksize,pthread_attr_setstacksize
執行緒保護 pthread_attr_getguardsize,pthread_attr_setguardsize
互斥量屬性
pthread_mutexattr_t 結構體
pthread_mutexattr_init,pthread_mutexattr_destroy
修改程序共享屬性 pthread_mutexattr_getpshared,pthread_mutexattr_setpshared
修改和獲取健壯的互斥量屬性 pthread_mutexattr_getrobust,pthread_mutexattr_setrobust
指明與該互斥量相關的狀態在互斥量解鎖之前是一致的 pthread_mutex_consistent
修改和獲取互斥量屬性 pthread_mutexattr_gettype,pthread_mutexattr_settype
讀寫鎖屬性
pthread_rwlockattr_t 結構體
pthread_rwlockattr_init,phtread_rwlockattr_destroy
共享屬性 pthread_rwlockattr_getpshared,pthraed_rwlockattr_setpshared
條件變數屬性
pthread_condattr_t 結構體
pthread_condattr_init,pthread_condattr_destroy
共享屬性 pthread_condattr_getpshared ,pthread_condattr_setpshared
時鐘屬性 pthread_condattr_getclock,pthread_condattr_setclock
屏障屬性
pthread_barrierattr_t 結構體
pthread_barrierattr_init,pthread_barrierattr_destroy
共享屬性 pthraed_barrierattr_getpshared ,pthread_barrierattr_setpshared
ftrylockfile,flockfile,funlockfile
執行緒私有
pthread_key_t 結構體,pthread_key_create,pthread_key_delete
pthread_once 解決條件競爭
pthread_setcancelstate,pthread_testcancel,pthread_setcanceltype
pthread_sigmask,sigwait,pthread_kill,pthread_atfork
守護程序
系統的各種守護程序
守護程序編寫
1.呼叫umask將檔案模式建立遮蔽字為0
2.fork,父程序退出
3.呼叫setsid建立新會話,稱為程序組長
4.修改工作目錄為根目錄
5.關閉不需要的描述符
6.開啟syslog
syslog函式
openlog,syslog,vsyslog,closelog
通過facility|level 實現優先順序
高階 I/O
fcntl,檔案鎖(測試,獲取,設定)
支援讀鎖,寫鎖,解鎖
SEEK_SET:當前位置為檔案的開頭,新位置為偏移量的大小
SEEK_CUR:當前位置為檔案指標的位置,新位置為當前位置加上偏移量
SEEK_END:當前位置為檔案的結尾,新位置為檔案的大小加上偏移量的大小
非阻塞I/O fcntl,O_NONBLOCK
多路複用
select(maxfdp1,read,write,except,timeval)
FD_ISSET,FD_CLR,FD_SET,FD_ZERO
poll(struct pollfd *fds, nfds_t nfds, timeout)
epoll_create
epoll_ctl(EPOLL_CTL_ADD,EPOLL_CTL_MOD,EPOLL_CTL_DEL)
epoll_event結構體
epoll_wait(int epfd, struct epoll_event *events,maxevents,timeout)
readv,writev
mmap,mprotect,msync,munmap
程序間通訊
pipe
popen,pclose
mkfifo,mknod
訊息佇列
msgget,msgsend,msgrcv,msgctl
訊號量
semget,semop,semctl
sembuf 結構體,semun聯合體
共享記憶體
shmget,shmat,shmdt,shmctl
思維導圖