- 博客(13)
- 收藏
- 关注
转载 TCP协议中的三次握手和四次挥手(图解)
原文来自:http://blog.csdn.net/whuslei/article/details/6667471/建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示:先来看看如何建立连接的。【更新于2017.01.04 】该部分内容配图有误,请大家见谅,正确的配图如下,错误配图也不删了,大家可以比较下,对比理解效果更好。这么久
2017-08-01 21:09:20 272
原创 标准IO
库函数: 库函数为了实现某个功能而封装起来的API集合,提供统一的编程接口,更加便于应用程序的移植,是编程语言或者应用程序的一部分。标准IO操作对象:FILE流指针,每个被使用的文件都在内存中开辟一个区域,用来存放文件的有关信息,这些信息是保存在一个结构体类型的变量中,该结构体类型是由系统定义的,取名为FILE。(在libio.h中定义)标准IO特点:(1)对系统调用做了一层封装,
2017-07-30 15:49:40 505
原创 文件IO
1、系统调用:用户空间进程访问内核的接口;把用户从底层的硬件编程中解放出来;极大的提高了系统的安全性;使用户程序具有可移植性;是操作系统的一部分。2、在Linux中,我们可以通过open系统调用打开一个文件,可以获得一个文件描述符(fd),这个fd表示打开的文件,我们可以read系统调用来读文件,可以通过write系统调用来写文件,通过close系统调用关闭文件文件相关系统调用函数1、
2017-07-30 15:32:59 289
原创 消息队列的使用方法
消息队列:(1)消息队列是IPC对象的一种。(2)消息队列由消息队列ID来唯一标识。(3)消息队列就是一个消息的列表,用户可以在消息队列中添加消息、读取消息等。(4)消息队列可以按照类型来发送接收消息。(5)消息队列具有一定的FIFO特性,但是它可以实现消息的随机查询,这些消息又存在于内核中。可以通过命令ipcs -a查看所有的IPC对象使用情况ipcs -m 查看
2017-07-29 13:32:19 840
原创 共享内存使用方法
可以通过命令ipcs -a查看所有的IPC对象使用情况ipcs -m 查看共享内存ipcs -q 查看消息队列ipcs -s 查看信号灯集ipcrm -m shmid 删除shmid的共享内存ipcrm -q msgid 删除消息队列ipcrm -s semid 删除信号灯集共享内存是一种最为高效的进程间通信方式,进程可以直接读写内存,而不需要任何数据的拷贝为了
2017-07-29 11:14:21 607
原创 信号灯集详细使用说明
信号灯(semaphore),也叫信号量。它是不同进程间或一个给定进程内部不同线程间的同步的机制信号灯种类:posix有名信号灯。posix基于内核的信号灯(无名信号灯)System V信号灯(IPC对象)System V的信号灯是一个或者多个信号灯的一个集合。其中的每一个都是单独的计数信号灯。而posix信号灯指的是单个计数信号灯可以通过命令ipcs -a
2017-07-28 21:06:40 4171
原创 线程安全、线程私有变量
线程安全:无论有多少个线程调用这个函数,此函数都会给相应的线程返回正确的结果。看下面这个例子:很明显我们在rebuf这个函数里返回了一个局部变量,在rebuf这个函数运行完之后,局部变量就会被销毁,所以我们打印出来的是这个样子的。那我们改进呢,函数运行完之后,局部变量就会被销毁,那我们就不让它销毁,加上static关键字
2017-07-27 18:41:24 2624
原创 Linux线程基本知识
1、线程:由于进程的地址空间是私有的,因此在进程间上下文切换时,系统开销比较大,为了提高系统的性能,许多操作系统规范里引入了轻量级进程的概念,也被称为线程,在同一个进程中创建的线程共享该进程的地址空间,并且和进程一样都参与内核同一的调度。2、进程和线程:1)、线程是参与内核调度最小基本单位,进程是拥有资源的最小基本单位2)、进程间相互独立,而同一个进程内的线程间共享进程
2017-07-26 22:11:46 399
原创 进程编程基本函数
pid_t fork(void)功能:创建一个新进程参数:无参返回值:成功: 1、在父进程里面返回一个大于0的值(子进程PID)2、在子进程里面返回0出错:返回-1pid_t getpid(void):函数返回调用进程本身的PIDpid_t getppid(void):函数返回调用进程的父进程的PIDpid_t wait(int *status)功能
2017-07-26 20:37:49 337
原创 fork函数的相关知识和使用
pid_t fork(void)功能:复制父进程来创建子进程返回值:成功给父进程返回子进程PID,给子进程返回0,失败返回-1 #include#include#includeint main(int argc, const char *argv[]){ pid_t pid; pid = fork(); if(pid < 0){ perror("Fai
2017-07-26 20:32:44 335
原创 printf()函数什么时候刷新缓存
大家应该都知道,printf(),是先将格式化好的信息先输到缓冲区上,因为输入输出的缓存为行缓存,所以当填满I/O缓存后,才进行实际I/O操作或者遇到换行符‘\n’(或者执行fflush、floce、exit、return),缓存大小为1K。请看如下程序:#include int main(int argv,const char *argv[]){ int n; printf(
2017-07-23 18:31:09 2094
原创 ubuntu下库的制作与使用
静态库:程序在编译的时候,如果链接的是静态库,会把程序中需要调用的函数接口实现代码从静态库中拷贝到可执行程序文件中,生成的可执行文件体积大,程序在运行的时候,不需要库的支持。动态库:程序在编译的时候,如果链接的是动态库,此时在可执行文件的头信息中记录动态库的名字,在程序运行的时候,操作系统会读取可执行文件的头信息,从而知道可执行文件在运行的时候,需要加载那些动态库。注意:动态连接的
2017-07-23 15:57:29 775
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人