- 博客(11)
- 资源 (1)
- 收藏
- 关注
原创 文件描述符、文件表项、v节点表项的联系
最近在阅读linux0.11源码,看到了文件系统,觉得文件描述符表和文件表项以及v节点表项概念有点混淆,于是翻了翻了万能的APUE和unix/linux编程实践,现在差不多弄懂了,就写篇博文分享给大家。以前只知道文件描述符只是一个索引,指向了pcb中的struct file *filp[],即文件描述符表,但是后面的就不知道了。今天终于明白了之后的内容了,原来文件描述符只是结构体数组的下标。。。。先
2017-03-14 20:40:28 2059
原创 高速缓存(cache)存储器
高速缓存(cache)存储器:这里先说明一下(高速缓存)cache和(高速缓冲)buffer的区别: buffer主要作用是在一定程度上减少对IO设备访问的次数,可以起到流量整形的作用,也提升了系统的性能,毕竟IO操作和内存和cpu的处理速度差距还是很大的,比如下载一个文件,是积攒到一定量才写回磁盘,而不是下载一个字节写回一个字节,这样过不了多久,磁盘就损坏了。 cache主要作用是缓解处理数据
2017-03-30 16:06:02 19841 7
原创 细节----函数返回局部变量
先来看一个例子作为引入:#include <stdio.h>#include <stdlib.h>int *test(){ int num = 3; return #}int main(){ int *p = test(); printf("%d\n", *p); return 0;}这样的一段代码,如果是gcc编译会有提示警告:函数返回局
2017-03-29 20:00:03 630
原创 string和char*互转以及c_str()的陷阱
string类型和char*、char[]的转换string转const char *: 1. 使用string的成员函数c_str(); 2. 使用string的成员函数data();string转char *:1. 使用string的成员函数copy();char *转string:1. 直接赋值即可cha[]转string:1. 使用string的成员函数copy()
2017-03-29 10:02:23 6212
原创 函数模板和友元重载运算符报"无法解析的外部符"的解决方法
解决方法:1. 直接把定义和实现都写在类中 2. 如下: #include <iostream> using namespace std; template <class T> class Complex; template <class T> class Compleax { template <class S> //注
2017-03-21 21:43:23 1848 1
原创 函数模板和普通函数的抉择
当函数模板和普通函数同名时,会发生什么,下面直接测试:#include <iostream>using namespace std;template <typename T>void test(T a, T b){ cout<<"函数模板:"<<a<<" "<<b<<endl;}void test(int a, int b){ cout<<"普通函数:"<<a<<" "<<
2017-03-20 21:11:36 751
原创 Unix文件系统原理简介
文件系统在磁盘中大致分为三个区域:1.超级块 2.i-节点表 3.数据区1. 超级块:作用是存放文件系统本身的结构信息,比如每个区域的大小以及有哪些空余的磁盘块信息 2. i-节点表:存储文件的属性,比如大小以及所有者之类的。每个i-节点结构的大小一致,而且访问的方式就和数组类似,比如要访问i-节点号为9的i-节点结构,就对应i-节点表中的第10个位置。 3. 数据区:文件的内容就保存在这个区域
2017-03-19 23:41:48 2525
原创 linux0.11-高速缓冲区(buffer)底层原理
文件系统-高速缓冲区:首先我们为什么需要高速缓冲区而不是直接访问块设备中的数据。这是因为,IO设备的读写速度和CPU的处理速度差距太大,而高速缓冲区就起了一个中间过程的作用。需要读取磁盘上的数据时,先把数据写在缓冲区中,然后内核再来操作,如果要存入数据,也是先经过缓冲区,再存入磁盘。高速缓冲区在整个物理内存中的位置处于内核区和主内存区之间。这里引用《linux0.11代码完全注释》中的图。 在
2017-03-19 13:44:44 2326
原创 TCP异常终止连接及SO_LINGER选项
TCP的异常终止连接及SO_LINGER选项:终止一个连接的正常方式是一方发送FIN,进入FIN_WAIT1状态。当我们调用close()函数关闭连接之后,如果在发送缓冲区中还有数据,那么系统会发送这些数据,然后再发送FIN,但是也有可能发送一个复位报文段来释放一个连接,这种现象就称为异常终止连接。异常终止一个连接有两个优点:(1.马上丢弃待发送数据并立即发送复位报文段(2.RST的接收方会区分另一
2017-03-12 12:42:50 2051
原创 linux0.11源码研究---exit.c
exit.c程序中实现的大致实现的是进程终止和退出等方面如何处理的相关函数,包含kill()函数系统调用的内部实现、exit()函数系统调用的内部实现、waitpid()函数的系统调用的实现,以及一些更底层的函数的实现。要想看懂这些函数,需要对会话以及进程、进程组有一定的了解,并且对pcb里面的一些成员的了解。主要包括有这八个函数:void release(struct task_struct *
2017-03-07 15:45:44 967
原创 深入研究signal和sigaction
信号通常使用一个无符号长整数(32位)中的比特位表示各种不同的信号。因此最多可以表示32个不同的信号。signal()和sigaction()的功能比较类似,都是更改信号原处理句柄(handler,或称为处理程序)。但signal()就是内核操作上述传统信号的方式,在某些特殊时刻可能会造成信号丢失。之前介绍过signal()函数,signal()函数的返回值是一个无返回值且具有一个整型参数的函数指针
2017-03-06 19:55:39 1690
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人