Linux
文章平均质量分 75
T_tangc
这个作者很懒,什么都没留下…
展开
-
静态库和动态库创建与区别
一、静态库 静态库以.a为后缀,程序在编译链接的时候把库的代码链接到可执行文件中,程序运行的时候就不再需要静态库. 首先我们拿最简单的加法函数为例,这个时候我们首先需要创建add.c add.h .c main.c三个源文件add.c#include"add.h"int add(int x, int y){ return x+y;}add.h#if原创 2017-12-14 11:19:03 · 256 阅读 · 0 评论 -
生产者消费者模型
什么是生产者消费者模型生产者消费者模型可以总结为123 1值得是一种交易场所 交易场所就是指临界区,临界区是在同一时刻只可以有一个进程访问的资源2指的是两种角色 - 消费者 - 生产者3指的是有三种关系 - 消费者和生产者的同步关系 - 消费者和生产者的互斥关系 - 消费者和消费者互斥关系具体实现代码#include#include#include#in原创 2018-01-31 16:44:57 · 148 阅读 · 0 评论 -
tcp学习笔记
关于tcp运输连接的有趣问题为什么client最后还要发一次确认呢? 主要是为了防止已失效的连接请求报文段突然又传送到了server,因而产生错误。 原理:所谓”已失效的连接请求报文段”是这样产生的.考虑一种正常情况,client发出连接请求,但因连接请求报文丢失而未收到确认.于是A再重传一次连接请求.后来受到了确认,建立了连接.数据传输完毕后,就释放了连接.client发送了两个连接请求原创 2018-03-25 10:18:54 · 124 阅读 · 0 评论 -
http协议
究竟什么是协议? 在socket api接口中,读写数据都是按“字符串”的方式发送和接收的,有时候不利于我们的处理和结构化数据,应用层协议因此而来,协议保证一端发送构造的数据,在另一端能够正确的进行解析。HTTP协议–应用最广泛的一种协议 HTTP请求首行:[⽅法] + [url] + [版本] Header: 请求的属性, 冒号分割的键值对;每组属性之间使⽤\n分隔;遇...原创 2018-03-21 19:32:53 · 541 阅读 · 0 评论 -
进程间通信-匿名管道(学习笔记)
匿名管道管道是一种进程间通信的形式 头文件:#include< unistd.h > 功能:创建一匿名管道 原型 int pipe(int fd[2]) 参数:fd是文件描述符数组,其中fd[0]表示读端,fd[1]表示写端 返回值:成功返回0,失败返回-1,并且设置错误码 上面这张图形象的诠释了什么是管道,其实管道就是内核里的一段内存,给了读端口 和写端口,首先通过一个简单的例子,原创 2018-04-09 23:08:36 · 241 阅读 · 0 评论 -
ipc-命名管道(学习笔记)
命名管道由于基于fork机制,匿名管道的使用前提必须是父子进程或者有共同祖先的进程,但是若想让没有亲缘关系之间的进程之间进行通信,怎么做到呢?解决方案就是FIFO (First in, First out),又叫做命名管道,命名管道是一种特殊的文件类型,它在文件系统中是真实存在的,它的好处在于可以通过文件路径来识别管道,从而让没有亲缘关系的进程之间建立连接命名管道的使用步骤一、创建命名管道 有两种原创 2018-04-10 10:31:54 · 352 阅读 · 0 评论 -
如何理解HTTP协议的 “无连接,无状态” 特点?
HTTP 是一个属于应用层的面向对象的协议,HTTP 协议一共有五大特点:1、支持客户/服务器模式;2、简单快速;3、灵活;4、无连接;5、无状态。无连接无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。早期这么做的原因是 HTTP 协议产生于互联网,因此服务器需要处理同时面向全世界数十万、上百万客户端的网页访问,但每个...转载 2018-04-03 09:04:26 · 2376 阅读 · 0 评论 -
别把&和nohup混为一谈, 根本不是同一个东西好不好 ------ 聊聊./a.out & , nohut ./a.out , nohup ./a.out &的区别
在第一家公司工作的时候, 我认识了&,在第二家公司工作的时候, 我认识了nohup, 这就是渊源。 随后, 我就一直糊涂用他们, 但并不懂这两个东西。 网上很多地方是乱扯, 瞎复制, 为什么不自己实践一下呢?看个小程序: #include <stdio.h> #include <unistd.h> int main () { int x = 0;转载 2018-04-22 14:40:05 · 274 阅读 · 0 评论 -
Linux下的文件系统
超级块:存放文件系统本身的结构信息i节点表:存放文件属性如文件大小,最近修改时间等信息数据区:存放文件内容假如我们现在新创建一个文件,给它分配了237号节点,在237节点有100,400,600三个数据区的块,增加或者删除信息,就是在增加和减少块,使用这样的结构可以灵活的完成扩容和缩小。原创 2017-12-12 21:38:56 · 145 阅读 · 0 评论 -
基础IO与文件描述符
一、引题之前我们讲过C标准库提供的IO函数fread,fwrite等,那么它们到底是怎么实现的呢?它们是真的靠自己写出来的吗?不一定?我们先来看看关于操作系统的概念图 从中我们可以看出C标准库属于用户部分,是给用户的操作接口,不过这个接口它又是来源于系统调用接口,可以看成他是系统调用的封装,那我们探究一下我们之前提到的c标准库给我们提供的函数fope原创 2017-12-12 15:56:52 · 278 阅读 · 0 评论 -
由进度条程序引发的问题
在写这个函数下我们先进行一些铺垫工作,我们先来看一下fflush()函数#include int main(){ char c; scanf("%c", &c); printf("%d\n", c); scanf("%c", &c); printf("%d\n", c); return 0;}输入1运行结果是:4910看到这里肯定很多人觉得很惊讶,其原创 2017-11-17 21:35:28 · 165 阅读 · 0 评论 -
vfork的那些事情
本文参考了陈皓的文章基础知识首先说一下fork和vfork的差别:fork 是 创建一个子进程,并把父进程的内存数据copy到子进程中。vfork是 创建一个子进程,并和父进程的内存数据share一起用。这两个的差别是,一个是copy,一个是share。你 man vfork 一下,你可以看到,vfork是这样的工作的,1)保证子进程先执行。2)当子进程转载 2017-12-19 20:43:43 · 147 阅读 · 0 评论 -
Printf的缓冲机制
今天用fork()写程序时候,突然发现自己对Printf的缓冲机制还是有些不够了解,于是来深度解析一下,Printf的缓冲机制到底是怎么一回事呢? 首先printf是库函数,它是由C标准库提供的,它是对系统调用函数write()的一层封装,既然是封装,那它就一定会有改进和性能上的提升,达到方便使用的目的,缓冲机制就是其中的一项改进。为了更加透彻的了解printf函原创 2017-12-11 15:48:13 · 611 阅读 · 0 评论 -
进程控制总结
这是总结的思维导图,若有错误之处,欢迎指正Ps: 对其中一些自己容易犯错的东西,再做一点补充一、关于_exit()和exit()内置参数总结#include void _exit(int status);void exit(int status);参数:status 定义了进程的终止状态,父进程通过wait来获取该值说明:虽然status是int,但是仅有低8位可以原创 2017-12-20 12:35:53 · 338 阅读 · 0 评论 -
常用的文件读写函数
一、函数原型如果无文件会新创建一个FILE *fopen(const char *path, const char *mode);path:文件路径 mode:打开方式 打开成功函数返回目标文件的文件指针,否则返回空指针size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);ptr:保存数据的指针 siz原创 2017-12-12 10:03:10 · 5710 阅读 · 0 评论 -
Linux中进程之task_struct结构体
Linux中进程控制块每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体。task_struct是Linux内核的一种数据结构,它被装在到RAM里并且包含着进程的信息。每个进程都把它的信息放在task_struct这个数据结构中,task_struct包含了以下内容:标识符:描述本进程的唯一标识符,用来区别...原创 2018-05-12 11:04:14 · 1073 阅读 · 0 评论