自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 资源 (1)
  • 收藏
  • 关注

原创 多进程实现并发服务器

服务器:1.打印出客户端的IP地址和端口号,并发送返回给客户端2.可以同时连接多个客户端实现思路:第一部分:1.创建socket()2.给套接字命名bind3.创建监听上限listen()第二部分:while(1){cfd=accept(); //接收客户端的连接请求pid=fork(); 创建子进程if(pid==0){//进入子进程,子进程需要完成如下事情:1.子进程无须监听,关闭监听套接字2.读取客户端发送过来的字母3.完成小写转大写4.将转换完成后的大写字母返回给

2021-01-06 23:56:35 482

原创 Linux粘着位

粘着位:在Linux操作系统中,如果一个用户对目录具有写的权限,那么他就可以在这个目录下删除或者重命名文件。如果想我们创建这样一个目录,所有具有写权限的用户都可以修改文件或创建文件,但是不能删除文件。这个时候只需要对该目录设置粘着位即可。设置粘着位:1.chmod 1777 目录名2.chmod o+t 目录名取消粘着位:1.chmod 777 目录名2.chmod o-t 目录名在设置粘着位后other组后面会出现一个t...

2021-01-04 00:16:30 318

原创 3.3 Data Memeber的存取

3.3 Data member存取1.静态成员的存取static member可视为一个global变量,但是只在class生命周期内可见。static member只有一个实例放置在data segment。因此每次取用static member时,在内部会被转换为对唯一的extern实例的操作。取一个static member的地址,会得到指向该数据类型的指针,而不是指向class member的指针。2.非静态数据成员的存取非静态成员都是直接存放在每一个class object中,所以只有经过

2020-12-28 18:55:11 167

原创 Linux系统编程——access函数

#include<unistd.h>int access(const char* pathname, int mode);参数一:路径名参数二:F_OK 值为0,判断文件是否存在X_OK 值为1,判断对文件是可执行权限W_OK 值为2,判断对文件是否有写权限R_OK 值为4,判断对文件是否有读权限注:后三种可以使用或“|”的方式,一起使用,如W_OK|R_OK/* *access函数用来测试访问文件的能力 * */#include <unistd.h>#i

2020-12-23 23:51:25 365

原创 alarm函数实战

alarm函数1.头文件:#include <unistd.h>2.函数: unsigned int alarm(unsigned int seconds);3.作用:设置一个定时器,当计时器时间到达的时候,产生一个AIGALRM信号,此时可以注册一个函数去捕捉这个信号,若不设置捕捉信号则默认终止该进程。4.参数:定时的时间5.返回值:上个闹钟还剩下的时间总结:alarm函数就是用来定时发送一个SIGALRM信号给当前进程。案例:设置一个两秒的定时器,并注册一个信号捕捉函数,打

2020-12-10 16:29:36 419

原创 Linux系统编程——信号

信号的共性1.简单2.不能携带大量信息 3.满足特定条件才能发送 信号的机制1.信号是软件层面的中断。一旦信号产生,无论程序运行到什么位置都必须结束2.所有信号的产生以及处理都是内核产生.信号的产生1.按键产生 程ctrl+c ,ctrl+v2.系统调用产生 kill函数3.定时器 alarm,setitimer4.硬件异常产生 非法访问内存5.命令产生 如kill命令信号的未决与递达1.递达:信号产生递送并到达进程,直接被内核处理了2.未决: 产生和递达中间,主要是由于阻塞导

2020-12-10 16:07:56 110

原创 mmap共享内存映射实战

什么是mmap函数?mmap函数用于申请一段内存空间。我们可以将这一段内存空间作为进程之间通信的共享内存也可以将文件直接映射其中。munmap函数则释放由mmap函数创建的这段内存空间。函数定义如下: #include <sys/mman.h> void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); int munmap(void *add

2020-12-07 22:44:47 438

原创 Linux系统编程——fifo命名管道

定义fifo也被称为命名管道。未命名的管道只能在两个相关的进程之间使用,而且这两个进程还有一个共同的创建了他们的祖先进程,但是fifo,不相关的进程也能交换数据。fifo的创建fifo是一种文件类型,fifo的创建有两种方式。1.直接用命令创建 mkfifo2.利用函数创建int mkfifo(const char *pathname,mode_t,mode)下面用一个案例演示从一个进程发送数据到另外一个不相干的进程。发送端:#include <unistd.h>#incl

2020-12-06 14:39:27 149

原创 pipe管道实现进程间的通信

pipe1.管道由pipe函数创建2.管道的本质是伪文件(不占用磁盘空间,只占用内存)3.管道由两个文件描述符的引用,一个fd[0]读,一个fd[1]写4.数据从管道的写端流入,读端流出5.管道的原理是内核缓冲区(4k)借助环形队列机制实现pipe的局限性1.进程不能自己写数据自己读数据,需要有两端2.管道中的数据不可以反复读取,一旦读走,管道不复存在3.管道四半双工通信,数据只能单向移动4.只有在拥有共同祖先的时候才能使用管道pipe函数的定义pipe函数创建并打开管道#incl

2020-12-05 16:53:09 1920

原创 wait与waitpid函数

函数的定义 #include <sys/wait.h> pid_t wait(int *wstatus); pid_t waitpid(pid_t pid, int *wstatus, int options);wait函数 pid_t wait(int *wstatus);int *wstatus:传出参数,如果不关心子进程结束的原因,那么直接传NULL进去即可返回值:成功:返回回收进程的ID失败:返回-1waitpid函数pid_t waitpid(p

2020-12-04 13:37:21 464

原创 Linux系统编程——exec函数族

当我们需要在子进程中去执行其他的程序的时候,我们就需要用到exec系列函数#include <unistd.h>int execl(const char *path, const char *arg, ...);int execlp(const char *file, const char *arg, ...);int execle(const char *path, const char *arg, ..., char * const envp[]);int execv(const

2020-12-04 01:00:02 232

原创 父子进程共享

父子进程共享:刚fork后数据段代码段堆栈环境变量,全局变量、宿主目录位置、进程工作目录位置、信号处理方式等等。 父子进程不同(重点):进程id返回值各自的父进程进程创建的时间闹钟未决信号集 父子进程共享(重点):1.文件描述符(fd)2.mmap映射区父子进程数据共享的原则:读时共享,写时复制读时共享:如果子进程只是需要读取数据,完全没有必要再复制一份数据。写时复制:子进程需要更改文件的时候,这个时候需要复制一份数据过来。...

2020-12-03 23:56:16 6471

原创 fork函数循环创建子进程

fork函数fork函数主要用来在linux下创建进程fork函数的定义如下:#include <unistd.h>pid_t fork(void)fork函数一次调用返回两个值若fork成功子进程返回0父进程返回子进程的pid号若fork失败父进程返回-1案例:利用fork函数循环创建5个进程#include <unistd.h>#include <stdio.h>#include <stdlib.h>int main()

2020-12-03 18:54:58 877

原创 fcntl函数实现dup

##fcntl函数的定义fcntl(file control),对文件描述符提供各种各样的控制操作,fcntl是POSIX规范指定的首选方法。函数的定义:#include <fcntl.h>int fcntl(int fd,int cmd,…)参数1:被操作文件的文件描述符参数2:指定执行何种操作参数3 可选参数##用fcntl实现dup的功能int newfd=fcntl(int oldfd, FDUPFD,int new fd)参数一:需要指向的oldfd参数二:命令

2020-12-03 16:46:25 236

原创 输入输出重定向&dup、dup2

输入输出重定向&dup、dup2一、输入输出重定向输入重定向:将文件导入指定命令中输出重定向:将原本输出打开屏幕上数据信息写入到文件当中标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可以从其他文件或者命令中输入标准输出重定向(STDOUT,文件描述符为1):默认输出到屏幕标准输出重定向符号1“>”将标准输出重定向到指定文件中(清空原有数据)2“>>”将标准输出重定向到指定文件中(追加到原有数据后面)下面以>为例1.首先用touch创建一个

2020-12-03 14:30:57 566

原创 身份证验证程序(一)

身份证号码验证(一)——面向对象 身份证号码的验证我们在网上已经能够看到很多的代码了,相关的资料也有很多。但是很多都是用面向过程的方法来编写的,今天我们换一种思路用面向对象的方法来编写这个程序。 在编写一个程序之前我们要首先要学会调研。那么在这个程序中我们要首先了解的是身份证号码校验的条件是什么。因为这是第一版本我们的条件很简单,就是简单的用校验码来校验一个身份证号码是否正确。 身份证号码的编排有...

2020-12-01 14:08:19 3094 1

原创 身份证验证程序(二)

上一篇文章说到了身份证验证最基础的方法,现在我们来讲讲其中的细节问题。比如说身份证中的出生日期是不可以小于1900也不能大于当前的时间的。这一篇文章我们就来探讨一下这个问题。废话不多说我们先上代码。*def ___Date_Check(self, ID):"""创建一个函数用于判定关于身份证信息中的日期是否正确如果这里我们定义身份证上的日期要大于1900,同时小于当前的日期"""ID_...

2020-12-01 14:07:25 341

源代码.txt

本作品是一个身份证号码验证程序,输入一个身份证号码,判断身份证号码的是否符合身份证号码的规则,并提取出相关身份信息。

2019-09-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除