
网络编程
dr.xun
迭代
展开
-
Linux编程之fork(创建一个进程)
一、API头文件:unistd.hpid_t fork();作用:如果fork()调用成功,就会使内核建立一个新的进程,所建的新进程是调用fork()的进程的副本。系统调用fork()没有参数,它返回一个pid_t类型的值pid。pid被用来区分父进程和子进程。在父进程中,pid被置为一个非0的正整数;在子进程中,pid被置为0。根据fork()在父进程和子进程中的返回值不同,程序员可以据此为两个进程指定不同的工作。二、例子#include <stdio.h>#include原创 2022-05-08 23:01:41 · 3790 阅读 · 0 评论 -
一张图认识URI和URL
原创 2022-05-02 22:40:52 · 349 阅读 · 0 评论 -
并发模型2之accept+thread
一、特性每次连接对应一个线程,为一个客户提供服务,具有多线程、阻塞I/O、擅长长连接、利用多核特性、顺序执行等特点。缺点:由于操作系统支持的线程数有限,伸缩性受线程数限制。二、Python实现from SocketServer import BaseRequestHandlerfrom SocketServer import ThreadingTCPServerclass EchoHandler(BaseRequestHandler): def handle(self):原创 2021-04-04 10:57:13 · 158 阅读 · 0 评论 -
并发模型1之accept+fork
一、特性每次连接fork一个进程,为客户提供服务,具有多进程、阻塞I/O、擅长长连接、利用多核特性、顺序执行等特性。适合场景: 1. 连接数不大 2. 计算响应的工作量远大于fork()的开销 3. 需要长连接二、Python实现from SocketServer import BaseRequestHandler, TCPServerfrom SocketServer import ForkingTCPServer, ThreadingTCPServer...原创 2021-04-04 10:46:54 · 164 阅读 · 1 评论 -
并发模型0之accept+read/write
一、特性一次只能给一个客户提供服务,属于I/O阻塞、顺序执行。它是并发模型的原子流程,各类并发实现,都是在此基础上实现原子流程的多路复用。二、Python实现import socketdef handle(client_socket, client_addr): while True: data = client_socket.recv(4096) if data: sent = client_socket.send(da原创 2021-04-04 10:12:26 · 178 阅读 · 0 评论 -
Linux进程间同步之wait
一、关于系统级函数wait1、作用 实现进程同步。 当子进程执行时, wait()可以暂停父进程的执行,使其等待。一旦子进程执行完,等待的父进程就会重新执行。如果有多个子进程在执行,那么父进程中的 wait()在第一个子进程结束时返回,恢复父进程执行。2、函数信息头文件:sys/wait.h函数签名:pid_t wait(int *status)说明: 形参:如果status是一个指向整型数的指针,当wait 返回时,该指针就指向子进程退出时的状态信息...原创 2021-02-06 19:44:24 · 1742 阅读 · 0 评论 -
CentOS7.4设置固定IP详细操作步骤
采用方式:NAT模式 and 固定IP的模式。配置环境说明:主机为Win10专业版,虚拟机为VMware Workstation 15Pro中文版,虚拟机中的Linux系统为CentOS 7.464位。1.设置虚拟机的网络连接方式:按照如下图设置。2.配置虚拟机的NAT模式具体地址参数:(1)编辑--虚拟网络编辑器--更改设置(2)选择VMnet8--取消勾选使用本地DHCP--设置子网IP--网关IP设置(记住此处设置,后面要用到),如下图说明:修改子网IP设...原创 2020-09-13 12:00:33 · 2778 阅读 · 0 评论 -
POSIX多线程API函数
1、创建线程pthread_create()int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);返回值:成功时,返回 0, 失败时返回错误码。2、在线程函数中调用pthread_exit()来退出线程执行void pthread_exit(void *retval);3、取消另一个原创 2020-11-29 15:47:08 · 217 阅读 · 0 评论 -
进程的终止之exit、_exit、return间的区别
1、exit()头文件:stdlib.h函数声明:void exit(int status);参数说明:status ---->进程的退出状态,父进程可以使用它的低8位。返回值:是返回给父进程,通常用于指出进程所完成任务的成败。如果成功,则返回 0;如果出错,则返回非 0 值。作用:1、结束进程的执行; 2、关闭所有已打开的文件; 3、如果父进程在wait等待状态,exit则会重新启动父进程运行; 4、完成...原创 2020-11-21 21:50:19 · 781 阅读 · 0 评论 -
进程间通信之使用sigaction设置信号处理方式
一、sigaction函数介绍头文件:signal.h接口原型:int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);作用:1、通过oldact查询信号的处理方式;2、通过act设置信号的处理方式。参数说明:signum:要操作的信号,可以指定SIGKILL和SIGSTOP以外的所有信号。 act:要设置的对信号的新处理方式。 oldact:获取原来对信号的处理方式。返回值:原创 2020-11-08 22:18:00 · 1093 阅读 · 0 评论 -
进程间通信之使用kill发送信号
一、kill接口信息描述头文件:#include <sys/types.h> #include <signal.h>定义函数:int kill(pid_t pid, int sig);说明:系统调用kill()用来送参数sig 指定的信号给参数pid 指定的进程或它的进程组。参数pid 有几种情况: 1、pid>0 将信号传给进程识别码为pid 的进程; 2、pid=0 将信号传给和目前进程相同进程组的所有进程;...原创 2020-11-07 23:15:12 · 1125 阅读 · 0 评论 -
I/O复用select函数的简单用法
1、select函数#include <sys/select.h>int select(int maxfd , fd_set* readset, fd_set* writeset, fd_set* exceptset , const struct timeval* timeout);说明:成功时返回大于0,失败返回-1,超时返回时返回0maxfd 监视对象文件描述符数量readset 注册读数据文件描述符的集合writeset 注册写数据文原创 2020-11-01 17:24:23 · 203 阅读 · 0 评论 -
通过单管道(pipe)实现两个进程间双向通信
用例:#include <stdio.h>#include <unistd.h>#define BUF_SIZE 30int main(int argc, char const *argv[]){ char req[] = "Who are you?"; char rsp[] = "I'm xunye."; char buf[BUF_SIZE]; int fds[2]; pipe(fds); pid_t pid =原创 2020-11-01 11:07:22 · 2064 阅读 · 0 评论 -
通过管道(pipe)实现多进程通信交换hello world内容
知识点:#include <unistd.h>int pipe (int pipedes[2]) ;pipedes[0] ---> 通过管道接收数据时使用的文件描述符,管道的出口;pipedes[1] ---> 通过管道传输数据时使用的文件描述符,管道的入口。用例:#include <stdio.h>#include <unistd.h>#define BUF_SIZE 30int main(int argc, ch..原创 2020-11-01 10:35:16 · 287 阅读 · 0 评论 -
Linux下一个基于socket的简单并发服务器实现
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <signal.h>#include <sys/wait.h>#include <arpa/inet.h>#include <sys/socket.h>#define BUF_SIZE 30void error_handling(char* message){ fp.原创 2020-10-31 20:55:31 · 175 阅读 · 0 评论 -
socket网络编程入门写hello world
1、服务器端#include <string>#include <sys/socket.h>#include <arpa/inet.h>#include <iostream>#include <cstring>#include <cstdlib>#include <unistd.h>using namespace std;void error_handling(const char* message原创 2020-09-13 22:33:37 · 279 阅读 · 0 评论