- 博客(36)
- 收藏
- 关注
原创 C与C++动态内存分配
《1》C语言动态内存分配 要实现动态内存的分配,除了利用含指针成员的结构体之外,还需利用C语言提供的几个标准库函数。(使用时应包含头文件“alloc.h”或“malloc.h”或“stdlib.h”) 1.malloc 函数原型为void *malloc(unsigned int size);在内存的动态存储区中分配一块长度为"size" 字节的连续区域。函数
2017-09-23 10:21:47
420
原创 智能指针
1.什么是智能指针?//在C++中,用户必须自己动态申请内存,也必须自己动态释放内存,若用户自己忘记释放内存,则会造成内存泄露,而智能指针就是定义了一个类来解决这个问题,智能指针就是定义了一个类来封装资源的分配和释放,在构造函数中完成资源的分配和初始化,在析构函数中完成资源的清理,可以保证资源的正确初始化和释放。【定义类来封装资源的分配和释放,在构造中完成分配,在析构中完成释放】简
2017-09-22 22:07:10
277
原创 Select服务器代码实现
select服务器实现 服务器端selectserver.c(支持读写逻辑) 客户端selectclient.c select服务器优缺点: 优点: (1)select()的可移植性更好,在某些Unix系统上不支持poll() ; (2)select
2017-07-18 22:47:20
926
原创 命令代换
shell脚本中的命令代换指:执行命令并将命令替换部分替换为执行该命令后的结果,即先执行该命令,然后将命令的执行结果替换到该命令行中; Shell脚本中提供了三种命令命令代换:反引号(``)、$()、eval(也是Shell脚本中的一种命令代换) 三种命令代换的功能及作用: 反引号(``):会对命令行中'\'进行跳脱处理; $():相对于C语言中的(),用于算术运
2017-07-16 14:31:12
292
原创 linux常见指令(下)
26.od 27.touch 28.umask 29.chattr 30.lsattr 31.file 32.which 33.whereis 34.locate 35.find 36.gzip/zcat 37.bzip2/
2017-07-04 16:47:41
387
原创 linux常见指令(中)
11.cd指令 用于变换目录 12.pwd指令 13.mkdir指令 14.rmdir指令 用于删除空目录 15.ls 16.cp 17.rm 18.mv 19.basename/dirname 20.cat/tac
2017-07-04 16:35:07
7462
原创 调研网络端口号的分类
按端口号可分为3大类: 1)公认端口(Well Known Ports):从0到1023,它们紧密绑定(binding)于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如:80端口实际上总是HTTP通讯。 2)注册端口(Registered Ports):从1024到49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。例
2017-07-03 22:41:05
371
原创 探究C库中的FILE及system call中的文件描述符间的关系
说到文件指针,大多数人都知道它的类型为FILE* ,但不熟悉FILE是一种怎样的结构,而对于文件描述符,它是system call 中对文件进行基本操作(open、close、write等)的一种描述,相当于C库中的文件指针,即文件描述符对应于system call,而文件指针对应于C库; 首先介绍一下FILE:
2017-07-03 10:12:22
421
原创 Tcp定时器调研
1.TCP 是提供可靠的传输层,它使用的方法之一就是确认从另一端收到的数据,但是数据和确认都可能会丢失。TCP 通过在发送时设置一个定时器来解决数据传输问题。如果当定时器溢出时还没收到确认,它就会重传该数据。关键在于超时和重传策略,即怎样决定超时的时间间隔和如何确定重传的频率。 对于每个连接,TCP 管理着四个不同的定时器: 重传定时器(防止丢失数据报文段
2017-06-30 12:16:36
307
原创 排序算法性能总结
排序按某一种规则可分为比较类与非比较类两种 no.1 比较类排序 内部排序 外部排序 no.2 非比较类排序 计数排序(鸽巢原理),时间复杂度:,空间复杂度:,稳定性:,适用场景: 基数排序
2017-06-29 17:06:21
475
原创 守护进程
1.守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。linux的大多数服务器就是用守护进程实现的。同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。 2.守护进程及其特性 守护进程最重要的特性是后台运行。其次,守护进程必须与其运行前的环境隔离开来。
2017-06-29 14:25:46
297
原创 crond和crontab调研
1.crond及其用法的简单介绍 crond是Linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。 crond定时任务服务就像我们早上使用的闹钟一样 。
2017-06-28 18:34:09
300
原创 基于链表及环形队列的生产者与消费者简单实现
1.基于链表的生产者与消费者模拟实现 使用条件变量与互斥锁完成,可保证线程的互斥与同步,条件变量是衡量某种临界资源是否满足生产者生产或消费者消费的条件状况,而互斥锁是保证线程的安全性,条件变量与互斥锁必须搭配使用,而在某些情况下,互斥锁的使用可不与条件变量搭配; 分析生产者与消费者模型,可用“321原则”来描述: ‘3’指三种关系:生产者与消费者间关系(互斥与同步关系)、生产者
2017-05-31 10:36:33
636
原创 线程控制
1.线程简介:一个进程的地址空间中执行着多个线程。同一个进程的多个线程共享着同一地址空间,因此代码和数据都是共享的,若定义一个函数,在各线程中都可以调用,若定义一个全局变量,在各线程中都可以访问到。 线程有自己共享的资源,也有自己私有的资源; 线程共享资源:文件描述符表、每种信号的处理方式(SIG_IGN或自定义的信号处理函数)、当前工作目录、用户id和组id 线程私有资源
2017-05-23 21:17:24
324
原创 进程通信之共享内存
共享内存:申请一块内存(4KB的整数倍,非整数倍,向上取整),使得对个进程可以访问同一块内存空间,是最快的IPC形式(无需将数据进行拷贝,移动数据),共享内存方式不具备同步与互斥机制,通常与其它通信机制结合,达到进程间的同步与互斥,共享内存方式的ipc资源的生命周期为“随内核”,需用户显式删除。 共享内存方式的进程间通信操作如下:程序代码:
2017-05-23 13:30:47
298
原创 进程间通信之信号量
信号量的本质是一种数据操作锁,其本身不具有数据交换的能力,而是通过控制其他的通信资源(文件、外部设备)来实现进程间通信,它本身只是一种外部资源的标识。信号量在此过程中负责数据的互斥、同步等功能。 当请求一个信号量来表示资源时,进程需要读取信号量的值来判断资源是否可用。大于0,资源可以请求,等于0,无资源可用,进程会进入睡眠状态直至资源可用。当进程不再使用一个信号量量控制的共享资源时,信号量
2017-05-21 10:29:02
250
原创 进程间通信之消息队列
进程间通信包括管道、消息队列、信号量和共享内存。消息队列提供了一种从一个进程向另一个进程发送数据块的方法。每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值。可通过发送消息来避免命名管道的同步和阻塞问题。 消息队列的基本操作(加载两个进程)如下:程序代码:comm.hcomm.cserver.cclient.c
2017-05-21 10:24:23
224
原创 命名管道的通信方式
1.命名管道的本质是使两个没有必要具有血缘关系的进程通过文件的路径来进行间接通信;mkfifo(const char* pathname,...)函数可创建名为pathname的管道文件,其可支持无血缘关系的进程间通信,且其读数规则为先进先出(FIFO);下面,将介绍如何使用mkfifo()函数进行进程间通信(与匿名管道相比,命名管道更加灵活):首先,可创建两个可执行程序,通过多台虚拟
2017-05-15 00:29:30
404
原创 进程通信——管道的通信方式
1.什么是管道通信? 管道通信建立在具有血缘关系的进程之上,管道是一种单向通信方式,且其生命周期随着进程的结束而结束,称为“随进程性”,此外,管道是基于字节流的,管道最重要的一点是:管道内部已完成同步机制,数据具有一致性,不被外界打扰。 2.管道通信的四种方式(假定子进程进行写操作,父进程进行读操作): (1)当创建子进程成功时,子进程一直进行写操作,直至将管道写满,而
2017-05-14 19:54:31
711
原创 linux下的僵尸进程及atexit函数的使用及验证
1.僵尸进程是指:一个子进程在其父进程没有调用wait()或waitpid()的情况下退出,则这个子进程就是僵尸进程,若其父进程还存在而一直不调用wait(),则该僵尸进程将无法回收,等到其父进程退出后该进程将被init(进程号为1)回收; 调用wait()或waitpid()的进程会发生的几种情况: (1)若它没有任何子进程,则立即出错返回; (2)若其所有子进程都
2017-04-16 20:37:45
365
原创 linux下 task_struct结构体详谈
linux中的进程代表着处于执行期的程序以及它所管理资源的总称,因此,进程与程序是两码事,task_str是linux内核的一种数据结构,会被装载到RAM里并且包含着进程的信息,linux中每一个进程都由一个task_struct结构体来定义,即我们所说的PCB,是对进程控制的唯一有效手段,了解task_struct的结构是非常有用的,每一个进程都把它的信息放到task_struct这个数据结构里
2017-04-16 11:28:18
539
原创 Linux下find命令详解及粘滞位的介绍
1.Linux下的find命令:find命令在目录结构中搜索文件,并执行指定的操作,find命令提供了很多的查找条件,具有强大的搜索功能。命令格式:应用:按照文件名查找:按照文件权限查找:-prune的使用:-depth的使用:按照文件拥有者查找:
2017-03-21 15:39:17
402
原创 linux下常见的权限问题及验证
1.在linux下进入一个目录,需要什么权限? 首先,在linux 下创建一个目录family,进入目录,在目录中创建文件member1.c,member2.c,返回上一级,使用cd family进入目录,进而使用ls,可查看目录内容; 进而使用chmod 将目录权限改为000,如: 在以上验证中,发现将拥有者权限改为仅有读权限,仅有
2017-03-15 20:15:51
3307
原创 多态总结
由浅及深,首先,我们来看一下C++中的对象的类型,对象的类型分为两种:静态类型、动态类型;看下面的代码:class Base{public: void FunTest1() { cout<<"Base::FunTest1()"<<endl; } int _b;};class Deriver1:public Base{public : void FunTest2
2017-03-07 17:26:05
197
原创 类和对象详谈
this指针:对一个实例来说,可以看到它的成员函数和成员变量,但实例本身不可见,this指针时时刻刻指向这个实例。class student{public: void Initstudent(char* name,int age,char* gender) { strcpy(_name,name); _age = age; strcpy(_gender,gender);
2017-02-28 14:12:25
229
原创 关于c语言中几种特殊预定义符号的使用
1. 在c语言中,有一些特殊的预定义符号,这些预定义结合使用,会产生非常有趣的事情。下面,介绍一下这些特殊的预定义符号: _ _FINE_ _ //进行编译的源文件 _ _LINE_ _ //文件被编译的当前行号 _ _ DATE_ _ //文件被编译的日期 _ _TIME_ _ //文件被编译的时间如下面的程序代码语句
2016-11-04 18:49:53
2409
原创 编程初学者的自白
我是一名编程的初学者,对编程的知识没有太深的了解,以前,听学长学姐说,编程太费脑筋、无趣,同时还会掉头发,但当我在培训机构听了那里老师的第一节课时,我才发现编程是一件很有乐趣的事情,可以和机器很好地”沟通“; 同时,我学习编程的目标有以下几点: (1)对IT有一个很好的认知和理解; (2)IT行业就业发展很好,学习编程,在将来可以找到一份不错的工作; 对于学
2016-09-25 13:47:53
339
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人