《UNIX环境高级编程》——读书笔记7, 8, 9, 10

来源:互联网 发布:linux压缩目录命令 编辑:程序博客网 时间:2024/06/06 14:17

7 进程环境

7.1 引言

7.2 main函数

int main( int argc, char *argv[] );


7.3 进程终止

(1) exit函数

#include <stdlib.h>

void exit( int status );

void _Exit( int status );


#include <unistd.h>

void _exit( int status );

(2) atexit函数

#include <stdlib.h>

void atexit( void (*func)(void) );


7.4 命令行参数

7.5 环境表

7.6 C程序的存储空间布局

7.7 共享库

7.8 存储器分配

#include <stdlib.h>

void *malloc( size_t size );

void *calloc( size_t nobj, size_t size );

void *realloc( void *ptr, size_t newsize );

void free( void *ptr );


7.9 环境变量

#include <stdlib.h>

char *getenv( const char *name );


#include <stdlib.h>

int putenv( char *str );

int setenv( const char *name, const char *value, int rewrite );

int unsetenv( const char *name );


7.10 setjmp和longjmp函数

#include <setjmp.h>

int setjmp( jmp_buf env );

void longjmp( jmp_buf env, int val );


7.11 getrlimit和setrlimit函数

#include <sys/resource.h>

int getrlimit( int resource, struct rlimit *rlptr );

int setrlimit( int resource, const struct rlimit *rlptr );

struct rlimit{

    rlim_t rlim_cur;

    rlim_t rlim_max;

};


7.12 小结


8 进程控制

8.1 引言

8.2 进程标识符

#include <unistd.h>

pid_t getpid( void );

pid_t getppid( void );

uid_t getuid( void );

uid_t geteuid( void );

gid_t getgid( void );

gid_t getegid( void );


8.3 fork函数

#include <unistd.h>

pid_t fork( void );


8.4 vfork函数

8.5 exit函数

8.6 wait和waitpid函数

#include <sys/wait.h>

pid_t wait( int *statloc );

pid_t waitpid( pid_t pid, int *statloc, int options );

pid ==-1 等待任一子进程

pid > 0 等待与pid相等的子进程

pid == 0 等待其组ID等于调用进程组ID的任一子进程

pid < -1 等待其组ID等于pid绝对值的任一子进程


8.7 waitid函数

#include <sys/wait.h>

int waitid( idtype_t idtype, id_t id, siginfo_t *infop, int options );


8.8 wait3和wait4函数

#include <sys/types.h>

#include <sys/wait.h>

#include <sys/time.h>

#include <sys/resource.h>

pid_t wait3( int *statloc, int options, struct rusage *rusage );

pid_t wait4( pid_t pid, int *statloc, int options, struct rusage *rusage );


8.9 竞争条件


8.10 exec函数

#include <unistd.h>

int execl( const char *pathname, const char *arg0, ... /* (char *)0 */ );

int execv( const char *pathname, char *const argv[] );

int execle( const char *pathname, const char *arg0, ... /* (char *)0, char *const envp[] */ );

int execve( const char *pathname, char *const argv[], char *const envp[] );

int execlp( const char *filename, const char *arg), ... /* (char *)0 */ );

int execvp( const char *filename, char *const argv[] );


8.11 更改用户ID和组ID

#include <unistd.h>

int setuid( uid_t uid );

int setgid( gid_t gid );


(1)

#include <unistd.h>

int setreuid( uid_t ruid, uid_t euid );

int setregid( gid_t rgid, gid_t egid );

(2)

#include <unistd.h>

int seteuid( uid_t uid );

int setegid( gid_t gid );


8.12 解释器文件

8.13 system函数

#include <stdlib.h>

int system( const char *cmdstring );


8.14 进程会计

8.15 用户标识

#include <unistd.h>

char *getlogin( void );

8.16 进程时间

#include <sys/times.h>

clock_t times( struct tms *buf );

8.17 小结


9 进程关系

9.1 引言

9.2 终端登录

9.3 网络登录

9.4 进程组

#include <unistd.h>

pid_t getpgrp( void );

pid_t getpgid( pid_t pid );

int setpgid( pid_t pid, pid_t pgid );


9.5 会话

#include <unistd.h>

pid_t setsid( void );

pid_t getsid( pid_t pid );


9.6 控制终端

9.7 tcgetpgrp, tcsetpgrp和tcgetsid函数

#include <unistd.h>

pid_t tcgetpgrp( int filedes );

int tcsetpgrp( int filedes, pid_t pgrpid );


#include <termios.h>

pid_t tcgetsid( int filedes );


9.8 作业控制

9.9 shell执行程序

9.10 孤儿进程组

9.11 FreeBSD实现

9.12 小结


10 信号

10.1 引言

10.2 信号概念

10.3 signal函数

#include <signal.h>

void ( *signal( int signo, void (*func)( int ) ) ) (int);


10.4 不可靠的信号

10.5 中断的系统调用

10.6 可重入函数

10.7 SIGCLD语义

10.8 可靠信号术语和语义

10.9 kill和raise函数

#include <signal.h>

int kill( pid_t pid, int signo );

int raise( int signo );


10.10 alarm和pause函数

#include <unistd.h>

unsigned int alarm( unsigned int seconds );

int pause( void );


10.11 信号集

#include <signal.h>

int sigemptyset( sigset_t *set );

int sigfillset( sigset_t *set );

int sigaddset( sigset_t *set, int signo );

int sigdelset( sigset_t *set, int signo );

int sigismember( const sigset_t *set, int signo );


10.12 sigprocmask函数

#include <signal.h>

int sigprocmask( int how, const sigset_t *restrict set, sigset_t *restrict oset );


10.13 sigpending函数

#include <signal.h>

int sigpending( sigset_t *set );


10.14 sigaction函数

#include <signal.h>

int sigaction( int signo, const struct sigaction * restrict act, struct sigaction *restrict oact );

struct sigaction{

 void       (*sa_handler)(int);

 sigset_t sa_mask;

 int          sa_flags;

 void       (*sa_sigaction)(int, siginfo_t *, void *);

};


10.15 sigsetjmp和siglongjmp函数

#include <setjmp.h>

int sigsetjmp( sigjmp_buf env, int savemask );

void siglongjmp( sigjmp_buf env, int val );


10.16 sigsuspend函数

#include <signal.h>

int sigsuspend( const sigset_t *sigmask );


10.17 abort函数

#include <stdlib.h>

void abort( void );


10.18 system函数

10.19 sleep函数

#include <unistd.h>

unsigned int sleep( unsigned int seconds );


10.20 作业控制信号

10.21 其他特征

(1)信号名字

#include <signal.h>

void psignal( int signo, const char *msg );

char *strsignal( int signo );


(2)信号映射

#include <signal.h>

int sig2str( int signo, char *str );

int str2sig( const char *str, int *signop );


10.22 小结