文章目录
实验3: 进程的创建和管理 P11
- <sys/types.h><unistd.h>
- pid_t fork()
- 创建出一个新进程(与原先的及其类似); 返回值: 对父进程返回子进程号,子进程得到0
- pid_t getpid()
- 得到自己的进程号
- pid_t wait(int *status) <sys/wait.h>
- 等待子进程终止,返回: 子进程号
- status: 子进程结束的状态,写0即可
- void exit(int status)
- 进程退出,一般用于子进程退出
- status: 退出的状态; 0: 正常
- unsigned int sleep(unsigned int seconds)
- 线程休眠指定的时间(s)
实验4: 线程的创建和管理 P20
- <pthread.h>
- int pthread_create( pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg)
- 创建新线程
- thread: 指向进程标识符指针,即进程ID
- attr: 设置属性, NULL默认
- 进程运行函数的起始地址
- 传给线程启动函数的参数
- void pthread_exit (void *retval)
- 线程终止
- retval: 线程停止的状态, 通常为NULL
- int pthread_join( pthread_t thread, void **retval)
- 开启进程
- thread: 线程标识符
- 存储返回值
- int pthread_mutex_init( pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr)
- 初始化互斥锁
- 获得互斥锁
- 互斥锁的初始值, 一般为NULL
- int pthread_mutex_lock( pthread_mutex_t *mutex)
- 锁定(获取)互斥锁, 相当于P操作
- int pthread_mutex_unlock( pthread_mutex_t *mutex)
- 解除(释放)互斥锁, 相当于V操作
实验5: POSIX信号量 P29
- <semaphore.h>
- int sem_init( sen_t *sem, int pshared, unsigned int value)
- 信号量初始化
- sem: 信号量
- pshared: 信号量类型, 0: 只在当前进程共享
- value: 初始值
- int sem_wait( set_t *sem)
- –, 相当于P操作
- sem: 信号量
- int sem_post( set_t *sem)
- ++, 相当于V操作
- sem: 信号量
- int sem_getvalue( set_t *sem)
- 得到信号量的值
- sem: 信号量
实验6: 进程通信-信号 P41
- <signal.h>
- void ( *signal( int signum, void( *handler)( int)))( int)
- 给指定的信号添加行为(函数)-1
- signum: 某信号量
- handler: 处理函数, 可以自己写, 也可以用已经定义好的; 如 SIG_IGN|SIGDFL: 忽略|指定回默认值
- int signaction( int signum, const struct sigaction *act, struct sigaction *oldact)
- 给指定的信号添加行为(函数)-2
- signum: 信号值
- act: 新的处理
- oldact: 原先的处理
- int kill( pid_t pid, int sig)
- 发送信号-1
- pid: 发送对象
- sig: 信号值
- int sigqueue( pid_t pid, int sig, const union sigval val)
- 发送信号-2
- pid: 发送对象
- sig: 信号
- val: 信号参数
- unsigned int alarm( unsigned int seconds)
- 定时发送SIGALRM信号
- int getitimer( int which, struct itimerval *value)
- 获取定时器状态
- int setitimer( int which, struct itimerval *value, struct itimerval *ovalue)
- 获取定时器状态
- int pause()
- 让进程暂停直到信号出现
- int raise( int signo)
- 向自身所在的进程发送一个信号
实验7: 进程通信-共享内存 P55
- <sys/types.h><sys/ipc.h><sys/shm.h>
- int shmget( key_t key, size_t size, int shmflg)
- 得到|创建 共享内存标识符
- key: 共享内存标识符,0为新建
- size: 内存大小,若key!=0 则size=0
- shmflg: 权限
- void *shmat( int shmid, const void *shmaddr, int shmflg)
- 连接共享内存
- shmid: 共享内存标识符
- shmaddr: 指定共享内存的位置
- shmflg: 权限
- int shmdt( const void *shmaddr)
- 断开共享内存
- shmaddr:连接的共享内存的起始地址
- int shmctl( int shmid, int cmd, struct shmid_ds *buf)
- 完成对共享内存的控制
- shmid
- cmd: IPC_STAT|IPC_SET|IPC_RMID:得到状态|修改状态|删除共享内存
- buf: 共享内存结构体
实验8: 进程通信-信号量 P67
- <sys/types.h><sys/ipc.h><sys/sem.h>
- int semget( ket_t key, int nsems, int senflag)
0… 得到信号量集- key:信号量集标识符,0为新建
- size: 信号量个数
- shmflg: 权限
- int semop( int semid, struct sembuf *sops, unsigned nsops)
- 完成对信号量的 P|V 操作
- semid: 信号量集标识符
- sops: 信号量集结构体首地址
- 进行操作的信号量的个数
- int semctl( int semid, int semnum, int cmd, union semun arg)
- 得到|创建 信号量集
- semid: 信号量集标识符
- semnum: 某个信号量的下标
- cmd: 命令,
- arg:
实验9: 进程通信-消息队列 P81
- <sys/types.h><sys/ipc.h><sys/msg.h>
- int msgget( ket_t key, int senflag)
- 创建消息队列
- key: 消息队列的键值
- 消息队列的建立标志和存取权限
- int msgsnd( int msgid, const coid *msgp, size_t msgsz, int msgflg)
0.向消息队列发送消息- msgid:
- msgp:
- msgsz:
- msgflg:
- ssize_t msgrcv( int msgid, void *msgp, size_t msgsz, long msgtyp, int msgflg)
- 从消息队列接受消息
- msgid:
- msgp:
- msgsz:
- msytyp:
- msgflg:
- int msgctl( int msgid, int cmd, struct msqid_ds *buf)
- 在消息队列上执行指定操作
- msgid:
- cmd:
- buf:
实验10: 进程通信-管道 P92
- <unistd.h>
- int pipe( int filedes[2])
- 申请管道, 管道的值将放在传入的指针中; 使用 'close(filedes[0])'关闭读取端,1关闭输入端;
- filedes: 存放读写,0读取,1写入
当没有读取端时,输入端也将无效