《linux网络编程》学习笔记

vim操作汇总:
1、vim分为命令模式和编辑模式,默认进入命令模式,按“i”进入编辑模式,按ESC进入命令模式。
2、命令模式下输入":w"保存文件,"wq"保存并退出,"q!"不保存直接退出,"set nu"显示行号,"gg=G"自动排版,"dd"删除整行,"u"恢复刚刚修改的内容,"/b"查找字符串。
 
函数介绍:
1、fork()函数会创建一个进程,该进程的大部分变量保持和父进程一致,子进程自动继承父进程打开的文件句柄,是父进程的克隆,子进程和父进程一样从调用fork函数后的代码开始执行,返回值小于0时表示创建进程失败,返回值等于0则表示进入子进程,返回值大于0表示进入父进程。
2、wait()函数如果进程中存在子进程,则在父进程中调用wait函数会导致父进程阻塞,直到子进程结束并返回子进程id,参数为子进程退出时的状态。
3、int signal(int sig, __sighandler_t handler);函数第一个参数表示参数类型(除了SIGKILL 和 SIGSTOP);第二个参数可以是一个函数指针,处理在信号发生时需要执行的动作,也可以是SIG_IGN(忽略信号符号), 还可以是SIG_DEL(恢复系统默认信号处理符号)。在父进程中设定的信号和函数的关联关系会被 exec()调用自动用SIG_DFL 恢复成系统的缺省动作,这是因为在 exec 的子进程中没有父进程的函数映象。
4、int kill(pid_t pid, int sig);函数第一个参数指定信号发送对象进程标识。一个进程并不是向任何进程均能发送信号的,这里有一个限制,就是普通用户的进程只能向具有与其相同的用户标识符的进程发送信号。也就是说,一个用户的进程不能向另一个用户的进程发送信号。只有 root 用户的进程能够给任何线程发送信号。由于调用kill()的进程需要直到信号发往的进程的标识符,所以这种信号的发送通常只在关系密切的进程之间进行,比如父子进程之间。
5、unsigned int alarm(unsigned int seconds);函数参数是以秒为单位给出了定时器的时间,当到达的时候,就向系统发送一个SIGARLM信号。该函数通过exec()调用后仍然有效,但在fork()调用后,在子进程中失效。
6、linux中管道实现利用int pipe(int fd[2])函数,数组中fd[0]是从管道中读出数据的句柄,fd[1]是向管道中写入数据的句柄,也就是从fd[1]写入由f[0]读出。可以像读取和写入文件一样对管道进行读写但是要确保数据是单向传输。匿名管道只能在父子进程中进行通信,命名管道可以再不同进程中通信。
7、System V IPC进程通讯包括消息队列,信号量,共享内存。
8、由于内存共享机制不能保证两个进程对同一段内存操作的先后顺序,因此一般与信号量一起使用,利用信号量实现同步,利用共享内存进行数据的读写。
9、由于windows下的socket编程是从linux下移植过去的,因此编程的函数和接口和windows下大同小异,提供了阻塞,非阻塞,I/O多路复用,信号驱动I/O,异步I/O。阻塞模式:程序调用编程接口则当前进程会进入等待状态,直到有连接到来或有数据到来;非阻塞:如果没有连接和数据到来则函数直接返回错误,进程不会进入等待状态,这种方式需要不停的检测函数返回值,极大浪费了CPU资源。I/O多路复用模式:利用select函数实现对多个文件描述符的检测,在文件描述符状态发生变化时,select函数会返回,可以获取文件描述符状态进行相应操作,select函数还可以设置等待超时时间;信号驱动I/O模式:当内核文件描述符就绪时,系统会发送SIGIO信号给应用程序,应用程序实现对SIGIO信号的处理,对TCP作用不大,因为TCP中SIGIO信号发生几率太高;异步I/O模式:当内核进行初始化结束后系统发送信号通知应用程序。
原文地址:https://www.cnblogs.com/ourroad/p/3078924.html