- 博客(15)
- 收藏
- 关注
原创 TCP笔记
链路层以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500字节和1492字节。链路层的这个特性叫做MTU,最大传输单元。如果IP层有一个数据报要传,而且数据的长度比链路层的MIU还大,那么IP层就需要进行分片(fragmentation),把数据报分成若干片,这样每一片都小于MTU。IP不可靠(unreliable)的意思是它不能保证IP数据报能成功地到达目的地。I...
2018-08-24 21:15:50
200
转载 函数指针
函数的类型由它的返回类型和形参类型共同决定,与函数名无关。比如://乘法运算int product(int u, int v){ return u*v;}想要声明一个可以指向该函数的指针,只需要用指针替换函数名即可:int (*pf)(int, int);// 未初始化,这是一个声明,和int i;一样函数指针的使用当我们把函数名作为一个值使用时,该函数自动转换为...
2018-08-24 16:59:41
162
原创 ctime函数使用遇到的坑
今天在使用ctime函数遇到了一个问题,示例代码如下:char *date; //获取当前的时间time_t now = time(NULL);date = ctime(&now);delete_crlf(date); //此函数是为了删除date的换行符printf("%s\n", date);sleep(2);now = time(NULL);c
2017-11-13 16:01:43
2364
原创 Unix环境高级编程学习笔记(0)-Unix基础
输入和输出1.文件描述符 文字描述符是一个小的非负整数,内核用以标识一个特定进程正在存访的文件。当内核打开一个现存文件或创建一个新文件时,它就返回一个文件描述符。当读、写文件时,就可使用它。 2.标准输入、标准输出和标准出错 按惯例,每当运行一个新程序时,所有的 shell都为其打开三个文件描述符:标准输入、标准输出以及标准出错。如果像简单命令 l s那样没有做什么特殊处理,则这三个描述符都连
2017-10-26 20:04:56
970
转载 文本文件与二进制文件区别
一、文本文件与二进制文件的定义 大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是在编码层次上有差异。 简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码)。 从上面可以看出文
2017-10-25 15:24:03
368
原创 序列化与反序列化
什么是序列化序列化是把数据结构或对象翻译成一种能够被存储(比如:存储在一个文件或内存缓冲区)和传输(比如:通过网络连接)的格式的过程,并在之后重新构造出来(可能是在一个不同的计算机环境中)。 序列化是将对象转换成一系列字节,这样对象就可以很容易地保存到持久存储,或者通过网络进行传输。然后将字节流反序列化——转换成原始对象的副本。序列化的作用1) 把对象的字节序列永久地保存到硬盘上(通常存放在一个文
2017-10-25 14:52:58
232
转载 linux下各主要文件夹作用
/ 根目录 包含了几乎所的文件目录。相当于中央系统。进入的最简单方法是:cd /。/boot 引导程序,内核等存放的目录这个目录,包括了在引导过程中所必需的文件。在最开始的启动阶段,通过引导程序将内核加载到内存,完成内核的启动(这个时候,虚拟文件系统还不存在,加载的内核虽然是从硬盘读取的,但是没经过Linux的虚拟文件系统,这是比较底层的东西来实现的。然后内核自己创建好虚拟文件系统,并且从虚拟
2017-10-23 15:30:03
421
原创 进程管理
linux的进程之间的调用(fork and exec)(1)系统先以 fork 的方式复制一个与父进程相同的暂存进程,这个进程与父进程唯一的差别就是 PID不同! 但是这个暂存进程还会多一个 PPID 的参数, PPID 就是父进程的进程标识符 (2)暂存进程开始以 exec 的方式加载实际要执行的程序,最终产生子进程服务(daemon):常驻在内存中的进程服务大致可分为系统所需要的服务(e.g
2017-10-23 13:15:40
357
原创 Linux的帐号管理与ACL权限设定
用户在终端界面通过login接口,输入帐号密码后,linux系统做了什么? 1. 先找寻 /etc/passwd 里面是否有你输入的账号?如果没有则跳出,如果有的话则将该账号对应的 UID 与GID (在 /etc/group 中) 读出来,另外,该账号的家目录与 shell 设定也一并读出; 2. Linux 会进入 /etc/shadow 里面找出对应的账号与 UID,然后核对一下你刚刚输入的
2017-10-23 10:11:22
276
原创 C++ 双向队列链式实现和队列的顺序实现
双向队列采用双向链表实现dequeue.h#ifndef _DEQUEUE_H#define _DEQUEUE_Htypedef int DataType; class Node{private: DataType data;public: Node *next; Node *prior; Node(DataType val); ~Node();
2017-10-12 13:47:40
805
原创 C++ 顺序栈和链式栈的实现
stack.h#ifndef _STACK_H#define _STACK_H#include <vector>typedef int DataType;class Node{private: DataType data;public: Node *next; Node(DataType val); ~Node(); DataType get_data
2017-10-12 13:40:14
685
原创 C++ 双向链表的实现
list.h#ifndef _LIST_H#define _LIST_Htypedef int DataType;class Node{private: DataType data;public: Node *next;//后驱指针 Node *prior;//前驱指针 Node(DataType val); ~Node(); DataType
2017-10-11 19:57:08
281
转载 C++:复制构造函数在什么时候被调用?
1、对象在创建时使用其他的对象初始化Person p(q); //此时复制构造函数被用来创建实例pPerson p = q; //此时复制构造函数被用来在定义实例p时初始化p2.对象作为函数的参数进行值传递时f(p); //此时p作为函数的参数进行值传递,p入栈时会调用复制构造函数创建一个局部对象,与函数内的局部变量具有相同的作用域需要注意的是,赋值并不会调用复制构造函数,赋值只是赋值运算符(重载)
2017-10-10 15:16:23
2190
转载 C++中delete和delete[]的区别
C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。关于 new[] 和 delete[],其中又分为两种情况:(1) 为基本数据类型分配和回收空间;(2) 为自定义类型分配和回收空间。请看下面的程序。#include <iostream>;using namespace std;class T {
2017-10-10 15:10:27
188
转载 C++ STL vector 用法详解
介绍vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全
2017-10-07 18:16:22
256
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人