C/C++
文章平均质量分 73
zhang_dawei666
这个作者很懒,什么都没留下…
展开
-
信号那点事(一)
信号概念 信号是软件中断。很多⽐较重要的应⽤程序都需处理信号。信号提供了⼀种处理异步事件的⽅法。每个信号都有⼀个名字。这些名字都以三个字符SIG开头。 查看系统支持的信号 在Linux系统中可以使用kill -l命令来查看系统支持的信号。 信号发生的条件1) 进程调用kill函数或使用kill命令发送信号给其他进程。2) 系统内核异常产生的中断。如硬件损坏等等。 信号...原创 2018-04-30 11:27:14 · 255 阅读 · 1 评论 -
信号那点事(二)-信号集及相关操作
信号那点事(二)-信号集及相关操作前言 POSIX.1 定义了一个数据类型sigset_t用于表示信号集。 使用信号集处理信号的方式与原来的信号方式不一样。主要体现在sigaction函数上。一旦对给定的的信号设置了一个动作,那么在调用sigaction显示的改变信号的处理方式之前,该设置就一直一样。 信号集操作增加信号到信号集int sigaddset(sigset_t *set, ...原创 2018-05-10 13:28:24 · 273 阅读 · 0 评论 -
fork那点事
fork那点事fork 总结fork()通过复制调用进程来创建一个新进程。在Linux下,fork()是通过使用写时复制页面实现的,所以它唯一的缺点是复制父页表的时间和内存,并为子进程创建独特的任务结构。fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它有三种不同的返回值: 1)在父进程中,fork返回新创建子进程的进程ID; 2)在子进程中,fork返回0; 3...原创 2018-04-29 12:41:29 · 253 阅读 · 0 评论 -
epoll 总结
epoll 总结epoll概述 在网络通信中,由于网络环境复杂、程序的健壮性不佳等因素的存在,会造成通信双方不能正常通信。 常见的不稳定因素如下: 1)服务器进程终止。客户端在不知道服务器进程已终止的情况下发送数据给服务器。如果客户端程序 没有处理SIGPIPE信号,客户端程序会崩溃。 2)客户端与服务器的网络不通。客户端发送的数...原创 2018-06-12 00:54:50 · 2180 阅读 · 0 评论 -
进程同步方式(一)--记录锁
进程同步方式(一)--记录锁记录锁定义 一个进程正在读或修改文件的某个部分时,可以使用记录锁锁定文件的一个区域(也可能是整个文件)。它是一个字节范围内的锁。接口声明 POSIX记录锁是使用fcntl 函数实现。Linux系统支持POSIX标准。 #include <unistd.h> #include <fcntl.h> int fcntl(i...原创 2018-06-06 19:35:19 · 1454 阅读 · 0 评论 -
进程通信—管道
进程通信—管道概述 pipe函数创建一个管道,一个可用于进程间通信的单向数据通道。 数组pipefd用于返回两个指向管道两端的文件描述符。 pipefd [0]指的是管道的读取端。 pipefd [1]指的是管道的写入端。 写入管道写入端的数据由内核缓冲,直到从管道的读取端读取。 接口说明#include <unistd.h>int pipe(int pipefd[2]);#de...原创 2018-06-16 16:32:01 · 839 阅读 · 0 评论 -
OpenSSL 握手过程及重要操作
OpenSSL 握手过程及重要操作概述 大部分的网站都是支持SSL协议来保证数据在传输过程中的安全。因此了解OpenSSL握手过程及重要操作很重要。使用RSA密钥交换算法时的标准SSL握手主要步骤如下:1. Client Hello 客户端发送给服务器端需要的信息。 这些信息包括客户端SSL版本号,cipher设置,会话特定数据。对应于上图中的步骤【1】.2.Server Hello ...原创 2018-06-24 18:35:00 · 4763 阅读 · 2 评论 -
XSI IPC-共享存储总结(一)
XSI IPC-共享存储总结(一)XSI IPC-共享存储 有三种XSI IPC,它们分别是消息队列(msg)、信号量(semaphore)、共享存储(shm)。XSI IPC函数是紧密的基于System V的IPC,并且不使用文件系统命名空间,而是自行一派,定义了它们自己的命名空间。 共享存储允许两个或多个进程共享一个给定的存储区。进程之间数据的交换不需要复制到各自进程,因此共享存储...原创 2018-06-18 22:34:14 · 790 阅读 · 0 评论 -
异步I/O(一)
异步I/O(一)概述 AIO可以一次性发出大量的read/write调用并且通过通用块层的IO调度来获得更好的性能,用户程序也可以减少过多的同步负载,还可以在业务逻辑中更灵活的进行并发控制和负载均衡。 POSIX异步I/O(AIO)接口允许应用程序启动一个或多个异步执行的I/O操作。应用程序可以选择以各种方式通知I/O操作的完成:通过传递信号,通过实例化线程或运行完后没有通知。 ...原创 2018-06-11 00:05:33 · 1275 阅读 · 0 评论 -
学习RSA 算法
学习RSA 算法概述 RSA 算法目前是非对称算法领域里家喻户晓的算法。因此很有必要学习。密钥的生成。 取p、q两个大的互质的数。 n = p*q 。e与(p-1)*(q-1) 互质。 n 和e 拿来作为公钥。 求得(p-1)*(q-1)最小公倍数为b. 且令 d為同餘方程式 ex≡1(mod b) 中的最小正整數解。 在RSA中将n和e封装成公钥,n和d封装成私钥...原创 2018-06-28 02:24:14 · 312 阅读 · 0 评论 -
链表总结(一)
前言 链表在组织大量数据时候效率非常高,但是操作都是使用指针进行操作,比较容易出错。因此,掌握链表的操作很重要。测试例子及说明 下面的例子主要实现链表节点的插入、删除链表节点、追加节点到链表、遍历链表节点。#include <stdio.h>#include <stdlib.h>//定义链表节点 struct node { int data; str...原创 2018-07-05 02:37:12 · 635 阅读 · 0 评论 -
C程序的内存布局
C程序的内存布局C程序的典型内存表示由以下部分组成: 1.文本段(CPU 执行的机器指令) 2.初始化数据段(数据段) 3.未初始化的数据段(也称bss段) 4.栈(自动变量...原创 2018-08-08 14:21:42 · 728 阅读 · 0 评论 -
fork 与vfork 的异同
vfork 与fork异同总结前言 调⽤fork或vfork函数是Linux创建⼀个新进程的⽅法.fork 由fork创建的新进程被称为⼦进程(child process)。该函数被调⽤⼀次,但返回两次。两次返回的区别是⼦进程的返回值是0,⽽⽗进程的返回 值则是新⼦进程的进程ID...原创 2018-08-08 16:51:59 · 1163 阅读 · 0 评论 -
memmove 与memcopy 的区别
memmove 与memcopy 的区别内存重叠的概念 顾名思义,重叠就是有重复的部分。在字符串拷贝的过程中,还没被拷贝就已经被覆盖了原来的值。内存重叠在拷贝的过程中指源指针开始的内存与目的指针指的内存有重叠。我们可以在同一个数组中模拟内存重叠的现象。 ...原创 2018-08-13 16:46:24 · 615 阅读 · 1 评论 -
-fpic 与-fPIC的区别
-fpic 与-fPIC的区别前言 在编译动态库的时候,我们应该需要使用-fpic 或-fPIC参数。如下所示: 然后,使用gcc或g++ 命令生成动态库pic 与PIC的异同 相同点:都是为了在动态库中生成位置无关的代码。...原创 2018-08-22 10:31:17 · 40257 阅读 · 1 评论 -
fork后父子进程共享文件描述符
fork后父子进程共享文件描述符测试程序#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <time.h>#include <stdlib.h&g原创 2018-04-18 11:52:54 · 1288 阅读 · 0 评论 -
OpenSSL 签名验签接口调用及测试
OpenSSL 签名验签接口调用及测试概述 项目中我们经常会遇到开发签名、验签功能。签名、验签是可信赖网络的一个重要功能。因此,我记录了OpenSSL 签名验签接口调用及测试。相关测试代码base64编码相关的代码base64.h头文件#ifndef BASE64_H#define BASE64_H#include <stdio.h>#include <stdlib...原创 2018-04-04 19:17:17 · 4181 阅读 · 5 评论 -
验证证书请求是否与秘钥匹配
验证证书请求是否与秘钥匹配验证脚本#!/bin/shif [[ "$1" = "" || "$2" = "" ]]; then echo "certRequestCheck.sh requestfile keyfile " exit 0;else value=`openssl req -text -noout -in $1 | grep "Public Key原创 2018-04-17 17:05:41 · 845 阅读 · 0 评论 -
C 字符串学习总结
1) const char * p 与 char * const p 的区别2)const char * p 详解3)char * const p 详解4) C 风格字符串原创 2017-01-17 07:31:55 · 429 阅读 · 0 评论 -
大端(Big Endian)和小端(Little Endian)的区别
大端(Big Endian)和小端(Little Endian)的区别背景在C/C++中,我们经常会处理位运算。不同的系统字节的排列就不一样,有的系统是大端排列,有的系统是小端排列。因此,处理位运算也会因不同的系统而不一样。下面我来介绍一下大端(Big Endian)和小端(Little Endian)的区别。大端小端测试代码总结:原创 2017-04-13 22:32:01 · 9823 阅读 · 0 评论 -
switch语句使用总结
switch语句使用总结背景 程序里的if-else太多,代码显得乱、逻辑不清晰。这时使用switch语句代替if-else结构的语句是个不错的选择。switch的语法如下 switch(表达式的值){ case值1 : 语句; break;原创 2017-05-03 23:49:55 · 2270 阅读 · 0 评论 -
C++ 字符串兼容C 字符串
C++ 字符串兼容C 字符串背景在开发过程中经常会遇到C++字符串与C字符串的结合操作。解决方法C++ string类提供了c_str()函数。c_str()函数返回C风格字符串,即返回指向字符串数组首地址的指针,并且以 null结束。例子#include #include #include #include using namespace std原创 2017-04-21 08:01:12 · 577 阅读 · 0 评论 -
学习解析命令行参数函数-getopt函数
学习解析命令行参数函数 —— getopt函数背景 工作的过程中,我们需要根据命令行参数来决定程序运行的过程。因此我们可以使用getopt函数来满足我们的工作需要。函数简介 函数原型如下: int getopt(int argc, char * const argv[], const char *optstring); 如果g原创 2017-05-07 01:55:15 · 457 阅读 · 0 评论 -
解决nginx如何存储HTTP客户端信息的问题
解决nginx如何存储HTTP客户端信息的问题定义一个Session类原创 2017-05-17 23:37:14 · 942 阅读 · 0 评论 -
信号量学习总结(一)
信号量学习总结(一) 定义 信号量是一种用于如果不同进程间或一个给定进程的不同线程间同步的原语。 信号量相关的操作 创建一个信号量 创建一个新的有名信号量或打开一个已存在的有名信号量。 sem_t*sem_open(const cha原创 2017-05-18 21:16:45 · 679 阅读 · 1 评论 -
JSON总结
JSON总结前言json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构.听起来很简单,其实通过这两种结构可以表示各种复杂的结构。JSON的两种结构1、对象(object) json对象:对象在json中表示为“{}”括起来的内容。 数据结构:键值对的结构。具体如下 {key:value原创 2017-12-08 21:37:24 · 711 阅读 · 0 评论 -
指针总结(二)
指针总结(二) 前言 在使用指针或看别人的代码的时候,我们会使用或看到*p++ 、++*pp++诸如此类风格的指针表达式。因此,理解指针表达式很重要。对自己而言少犯一些错误,同时也能更好的理解代码。 相关概念 左值和右值的概念源于编译器的设计开发者。左值 左值,顾名思义,就是赋值符号左边的值并且是在内存中有明确定义的地址。例如,变量。 右值 右值,赋值符号右...原创 2018-03-18 16:57:46 · 246 阅读 · 0 评论 -
NULL 和EOF的区别
NULL 和EOF的区别NULL 和EOF的定义EOF定义stdio.h…#ifndef EOF# define EOF (-1)#endif… NULL定义stddef.h 文件。。。/* A null pointer constant. */ #if defined (_STDDEF_H) || defined(__need_NULL)#undef NULL /* i...原创 2018-03-30 11:14:47 · 3244 阅读 · 0 评论 -
结构体对齐
结构体对齐前言 在C 或 C++ 中我们经常会看到结构体里有很多种类型,比如int 、char甚至有内含结构体变量等等。内存是计算机宝贵的资源。因此,能以最优化的方式使用内存对程序和系统的性能非常重要。结构体对齐 编译器是按照结构体成员的顺序一个一个的给每个成员分配内存。只有当存储的成员需要满足正确的边界对齐,成员之间才可能出现额外的用于填充的内存空间。设置对齐方式 本文以...原创 2018-03-24 16:25:54 · 169 阅读 · 0 评论 -
进程学习总结(一)
进程学习总结(一) 概述 在计算机中,进程是正在执行的计算机程序的实例。它包含程序代码及其当前活动(即程序的状态)。一个进程可能由多个并行执行指令的执行线程组成。 C程序的组成C程序⼀直由下列⼏部分组成:正⽂段 这是由C P U执⾏的机器指令部分。通常,正⽂段是可共享的,所以即使是经常执⾏的程序(如⽂本编辑程序、 C编译程序、 s h e l l等)在存储器中也只需有⼀个副本,另外,正...原创 2018-04-09 09:59:54 · 564 阅读 · 0 评论 -
标准I/O的缓存
标准I/O的缓存概述 标准 I / O库,它们的操作则是围绕流( s t r e a m)进⾏的 。当⽤标准I / O库打开或创建⼀个⽂件时,我们已使⼀个流与⼀个⽂件相结合。 当打开⼀个流时,标准 I / O函数f o p e n返回⼀个指向F I L E对象的指针。该对象通常是⼀个结构,它包含了I / O库为管理该流所需要的所有信息:⽤于实际 I / O的⽂件描述符,指向流缓存的指针...原创 2018-04-01 15:28:47 · 340 阅读 · 0 评论 -
多维数组与指针
多维数组与指针数组相关的概念数组的声明int b[10];其中b是数组名并且是一个指针常量。该数组有10个整型。多维数组声明int b[10][3];其中b是一个二维数组名并且是一个指针常量,表示10个数组且每个数组有三个整型数。 下标引用int b[10]; *(b+3) 等同于 b[3] 即访问数组的第三个元素。 多维数组访问元素以int a[3][4] 为例,如下图所示: ...原创 2018-03-26 21:16:52 · 171 阅读 · 0 评论 -
慢速系统调用(slow system calls)和快速系统调用(fast system calls)之间的区别
慢速系统调用(slow system calls)和快速系统调用(fast system calls)之间的区别概述 慢速系统调用(slow systemcalls)和快速系统调用(fast system calls)相关的名词在系统I/O资料里经常出现。因此了解这些名词的定义对理解系统I/O的架构非常有帮助。系统调用实际上有三种情况快速系统调用 一些系统调用立即返回。 “...原创 2018-04-09 13:45:07 · 2953 阅读 · 0 评论 -
标准I / O及验证(一)
标准I / O及验证(一)前言 标准I / O库处理很多细节,例如缓存分配,以优化长度执行 I / O等。对于标准I / O库,它们的操作则是围绕流(s t r e a m)进行的.标准I/O的缓存类型 标准I / O提供缓存的目的是尽可能减少使用 r e a d和w r i t e调用的数量.1)全缓冲a)说明 当填满标准I / O缓存后才进行实际I / O操作。当缓冲区没填满...原创 2018-03-28 20:49:23 · 352 阅读 · 0 评论 -
gcc 编译优化标志说明
gcc 编译优化标志说明 在编译过程中我们经常会使用gcc及其相关的编译参数来编译源文件。编译Nginx编译debug版本使用的gcc 参数如下: -pipe -O -W -Wall -Wpointer-arith -Wno-unused-paramete...原创 2018-08-19 23:16:00 · 2339 阅读 · 0 评论