
服务器编程
文章平均质量分 71
网络编程
gnez-dd
这个作者很懒,什么都没留下…
展开
-
多路IO转接服务器
多路I/O转接服务器多路IO转接服务器也叫做多任务IO服务器。该类服务器实现的主旨思想是,不再由应用程序自己监视客户端连接,取而代之由内核替应用程序监视文件selectint select(int nfds, fd_set * readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);//委托内核监控该文件描述符对应的读,写或者错误事件的发生.//nfds: 告诉内核要监控文件描述符的范围,一般取值为最大的文件原创 2021-11-29 20:15:02 · 862 阅读 · 0 评论 -
高并发服务器
高并发服务器第一种方案: 使用多进程, 可以让父进程接受新连接, 让子进程处理与客户端通信思路: 让父进程accept接受新连接, 然后fork子进程, 让子进程处理通信, 子进程处理完成后退出, 父进程使用SIGCHLD信号回收子进程第二种方案: 使用多线程, 让主线程接受新连接, 让子线程处理与客户端通信; 使用多线程要将线程设置为分离属性, 让线程在退出之后自己回收资源如何不使用多进程或者多线程完成多个客户端的连接请求将accept和read函数设置为非阻塞, 调用fcntl函数可以将文件描原创 2021-11-29 13:18:44 · 2727 阅读 · 0 评论 -
锁、条件变量、信号量
线程同步互斥锁#include<stdio.h>#include<stdlib.h>#include<string.h>#include<sys/types.h>#include<unistd.h>#include<pthread.h>#include<time.h>//定义一把锁pthread_mutex_t mutex;void *mythread1(void* args){ whil原创 2021-11-25 15:43:56 · 757 阅读 · 2 评论 -
守护进程和线程
守护进程和线程守护进程Daemon(精灵)进程,是Linux中的后台服务进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。一般采用以d结尾的名字,如vsftpdLinux后台的一些系统服务进程,没有控制终端,不能直接和用户交互。不受用户登录、注销的影响,一直在运行着,他们都是守护进程。如:预读入缓输出机制的实现;ftp服务器;nfs服务器等进程组和会话ps ajx查看进程组ID和会话ID进程组进程组是一个或者多个进程的集合,每个进程都属于一个进程组,引入进程组是为了简化原创 2021-11-25 14:53:47 · 860 阅读 · 0 评论 -
关于信号的一些东西
信号信号的机制进程A给进程B发送信号,进程B收到信号之前执行自己的代码,收到信号后,不管执行到程序的什么位置,都要暂停运行,去处理信号,处理完毕后再继续执行。与硬件中断类似——异步模式。但信号是软件层面上实现的中断,早期常被称为“软中断”每个进程收到的所有信号,都是由内核负责发送的信号的状态产生按键产生,如:Ctrl+c、Ctrl+z、Ctrl+\系统调用产生,如:kill、raise、abort软件条件产生,如:定时器alarm硬件异常产生,如:非法访问内存(段错误)、除0(浮点数原创 2021-11-25 14:52:33 · 173 阅读 · 0 评论 -
进程间通信
进程间通信Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信IPC管道管道是一种最基本的IPC机制,也称匿名管道,应用于有血缘关系的进程之间,完成数据传递管道的本质是一块内核缓冲区 ,内部使用环形队列实现由两个文件描述符引用,一个表示读端,一个原创 2021-11-24 22:48:53 · 215 阅读 · 0 评论 -
关于进程控制
进程控制创建进程fork//创建子进程pid_t fork(void);//成功:父进程返回子进程的PID,子进程返回0;失败:返回-1,设置errno值父子进程谁先抢到CPU时间片谁先执行父子进程间不能共享全局变量,虽然打印出来的地址一样,因为是虚拟地址如果父子进程只是对全局变量做读操作,则父子进程在内存中只有一份,属于共享如果父子进程中的任何一个进程对该变量做修改操作,会在内存中拷贝一个副本,然后在这个副本上进行修改,修改完成以后映射回去#include<stdio.原创 2021-11-24 22:47:36 · 424 阅读 · 0 评论 -
文件和目录
文件和目录stat/lstat//获取文件属性int stat(const char *pathname, struct stat *buf);int lstat(const char *pathname, struct stat *buf);//成功返回0,失败返回-1struct stat { dev_t st_dev; //文件的设备编号 ino_t st_ino; //节点 mode_t st_mode; //文件的类型和存取的权限 nlink_t s原创 2021-11-24 11:56:59 · 117 阅读 · 0 评论 -
文件I/O
文件I/O文件描述符对于内核,所有打开的文件都通过文件描述符引用文件描述符是一个非负整数,当打开一个现有文件或新建一个文件时,内核向进程返回一个文件描述符文件描述符0与进程的标准输入关联STDIN_FILENO文件描述符1与标准输出关联STDOUT_FILENO文件描述符2与标准错误关联STDERR_FILENOopen//打开或创建一个文件#include<fcntl.h>int open(const char* pathname,int flags);int op原创 2021-11-24 11:56:19 · 743 阅读 · 0 评论 -
高性能服务器程序框架
高性能服务器程序框架服务器模型C/S模型TCP/IP协议在设计和实现上并没有客户端和服务器的概念,在通信过程中所有机器都是对等的C/S(客户端/服务器)模型:所有客户都通过访问服务器来获取所需的资源适合资源相对集中的场合,并且其实现较为简单服务器是通信的中心,当访问量过大时,可能所有的客户都将得到很慢的响应P2P模型P2P(Peer to Peer,点对点)模型摒弃了以服务器为中心的格局,让网络上所有主机重新回归到对等的地位P2P模型使得每台机器在消耗服务的同时也给别人提供服务,这样原创 2021-11-23 13:12:01 · 793 阅读 · 0 评论 -
Linux服务器程序规范
Linux服务器程序规范日志Linux系统日志服务器的调试和维护都需要一个专业的日志系统Linux提供一个守护进程syslogd来处理系统日志现在的Linux系统上使用的都是其升级版rsyslogdrsyslogd守护进程既可以接受用户进程输出的日志,又能接收内核日志用户进程通过调用syslog函数生成系统日志,该函数将日志输出到一个UNIX本地域socket类型(AF_UNIX)的文件/dev/log中。rsyslogd则监听该文件以获取用户进程的输出内核日志在老系统上是通过守护进程rkl原创 2021-11-22 20:59:41 · 901 阅读 · 0 评论 -
Linux网络编程基础API
Linux网络编程基础APIsocket地址APIsocket地址:一个IP地址和端口对(ip,port),唯一表示了使用TCP通信的一端字节序大小端字节序32位机的CPU累计器一次能装载(至少)4字节,即一个整数。这4个字节在内存中的排列顺序将影响其被累加器装载成的整数的值大端字节序(MSB):一个整数的高位字节(2331bit)存储在内存低地址处,低位字节(07bit)存储在内存高地址处小端字节序(LSB):一个整数的高位字节(2331bit)存储在内存高地址处,低位字节(07bi原创 2021-11-21 20:54:35 · 2483 阅读 · 1 评论 -
高级IO函数
高级I/O函数pipe函数//创建一个管道,实现进程间通信#include<unistd.h>int pipe(int fd[2]);//成功时返回0并将一对打开的文件描述符值填入其参数指向的数组。失败返回-1并设置errno//fd[0]只能用于从管道读取数据//fd[1]只能用于往管道写入数据//实现双向通信需要使用两个管道//默认情况下这一对文件描述符时阻塞的。如果用read系统调用读取一个空的管道,read将被阻塞,直到管道中有数据可读//如果用write系统调原创 2021-11-21 20:52:42 · 1865 阅读 · 0 评论