多进程
Client:创建套接字,连接服务器,通信
Server:创建套接字,绑定,监听,接收,创建子进程,通信
信号机制
-
struct sigaction
struct sigaction { void (*sa_handler)(int);//信号处理函数 void (*sa_sigaction)(int, siginfo_t *, void *); sigset_t sa_mask; //搁置的信号集 int sa_flags; //信号处理的其他相关操作, //SA_RESETHAND:当调用信号处理函数时,将信号的处理函数重置为缺省值SIG_DFL //SA_RESTART:如果信号中断了进程的某个系统调用,则系统自动启动该系统调用 //SA_NODEFER :一般情况下,当信号处理函数运行时,内核将阻塞该给定信号。但是如果设置了SA_NODEFER标记,那么在该信号处理函数运行时,内核将不会阻塞该信号 void (*sa_restorer)(void); }
-
sigaction函数
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); - 功能:检查或修改与指定信号相关联的处理动作,可同时两种操作 - 参数: - signum:捕获信号的类型 - act: 指定新的信号处理方式 - oldact:输出老的信号处理方式
多线程
Client:创建套接字,连接服务器,通信
Server:创建套接字,绑定,监听,接收,创建子线程,通信
#include <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
- 功能:创建线程
- 返回值:成功:0,失败:错误号
- 参数:
-thread:传出参数,保存系统为我们分配好的线程ID
-attr:通常传NULL,表示使用线程默认属性。若想使用具体属性也可以修改该参数。
-start_routine:函数指针,指向线程主函数(线程体),该函数运行结束,则线程结束。
-arg:线程主函数执行期间所使用的参数,如要传多个参数, 可以用结构封装。
pthread_t pthread_self(void);
- 功能:获取线程号
- 返回值:线程号
- 参数:
int pthread_equal(pthread_t t1, pthread_t t2);
- 功能:
- 返回值: