
操作系统
与狼共舞-C
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
linux-0.11内核中的内存管理函数malloc
内存管理原创 2022-06-06 16:37:37 · 385 阅读 · 0 评论 -
Linux-0.11分段分页
1、地址变换分段:提供了程序中代码、数据和堆栈区域的保护机制,每个程序都有这一套段分页:提供了按需加载、虚拟内存等功能,基本目标是多进程共享物理内存2、分段、分页原创 2022-01-15 20:07:28 · 492 阅读 · 0 评论 -
Linux文件共享原理
前段时间读到《Computer Systems: A Programmer's Perspective》的第10章—系统级I/O,书中从整体角度对Unix I/O做了介绍,对Unix/Linux初学者来说,"Unix共享文件"一节的解释得尤为有用。故作为笔记,记录于此。1. Unix I/O 一个Unix文件就是一个m个字节的序列: B0, B1,转载 2017-03-31 09:22:40 · 1393 阅读 · 0 评论 -
Linux软连接与硬链接
Linux 系统中有软链接和硬链接两种特殊的“文件”。软链接可以看作是Windows中的快捷方式,可以让你快速链接到目标档案或目录。硬链接则透过文件系统的inode来产生新档名,而不是产生新档案。创建方法都很简单:软链接(符号链接) ln -s source target 硬链接 (实体链接)ln source targetinode要解释清楚两者的转载 2017-03-31 09:24:26 · 487 阅读 · 0 评论 -
静态链接库与动态链接库的使用
静态链接库的使用1.生成目标文件 gcc -c -o test.o test.c2.归档目标文件到静态链接库test中 ar -rcs -o libtest.a test.o补充:可以使用ar -t libtest.a查看静态链接库包含哪些目标文件3.使用静态链接库 gcc -o main.c -ltest //要求静态链接库在系...原创 2017-05-21 11:44:19 · 513 阅读 · 0 评论 -
Linux静态链接库、动态链接库、动态加载库
所谓静态链接库,说白了就是在你把写好的代码编译的时候,就把你引用的库一起给编进去了,从此后你编出来的执行程序跟外面都不再有任何关系,即使这个库更新了,你也搭不上边儿,其次,如果系统中许多类似的程序都需要用到这个库,那么各自在编译的时候都需要把这个库给编进去,浪费存储空间(加载到内存里应该也是浪费内存空间的)。linux系统中静态库的名字一般叫xxx.a, 所以如果你看到一个以 .a结束的文件那么它...原创 2018-03-11 09:49:28 · 681 阅读 · 0 评论 -
C/C++内存对齐原则以及作用
struct/class/union内存对齐原则:1).普通数据成员对齐规则:结构体(或联合)的第一个普通数据成员放在offset为0的地方,以后每个普通数据成员存储的起始位置从min(#pragma pack(n),普通数据成员自身长度)的整数倍开始。2).结构体作为数据成员:如果一个结构里面有其他的结构体数据成员,则结构体数据成员要从其内部“最宽基本类型数据成员"的整数倍地址开始存储。...原创 2018-03-11 22:32:21 · 682 阅读 · 0 评论 -
带缓冲IO与不带缓冲的IO
首先要明白不带缓冲的概念:所谓不带缓冲,并不是指内核不提供缓冲,而是只单纯的系统调用,不是函数库的调用。系统内核对磁盘的读写都会提供一个块缓冲(在有些地方也被称为内核高速缓存),当用write函数对其写数据时,直接调用系统调用,将数据写入到块缓冲进行排队,当块缓冲达到一定的量时,才会把数据写入磁盘。因此所谓的不带缓冲的I/O是指进程不提供缓冲功能(但内核还是提供缓冲的)。每调用一次write或re原创 2016-12-19 19:47:01 · 4498 阅读 · 2 评论 -
XSI消息队列与复用IO的结合实例
XSI消息队列的使用上存在一个问题:不能将他们与poll或者select一起使用,这是因为他们不能关联到文件描述符。然而我们可以通过使用Unix域套接字客服这一特点,为每个消息队列建立一个线程,在线程中接收消息,一旦有消息到达就通过UNIX域套接字一端发送,在套接字的另一端可以使用poll或者select读取消息。这样可以达到同时监听多个消息队列的目的。具体看代码:#include"apue.h"原创 2016-12-24 15:28:59 · 374 阅读 · 0 评论 -
FIFO例程
//生产者模式#include"apue.h"#include#include#define FIFO_NAME "./fifo"int main(){ int res; int fd; char data[MAXLINE]="hello world"; char recv[MAXLINE]; int n; if((res=mkfifo(FIFO_NAME,0777))原创 2016-12-21 17:57:42 · 1191 阅读 · 0 评论 -
linux下多进程共享资源互斥访问实例
#include #include #include #include #include #include pthread_mutex_t* g_mutex; //创建共享的mutex void init_mutex(void) { int ret; //g_mutex转载 2016-12-22 17:31:03 · 4018 阅读 · 0 评论 -
C语言程序内存布局
一个程序本质上都是由 BSS 段、data段、text段三个组成的。这样的概念在当前的计算机程序设计中是很重要的一个基本概念,而且在嵌入式系统的设计中也非常重要,牵涉到嵌入式系统运行时的内存大小分配,存储单元占用空间大小的问题。BSS段:在采用段式内存管理的架构中,BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Starte转载 2016-12-18 09:22:38 · 250 阅读 · 0 评论 -
线程和fork
前言:exce调用并不创建新进程,所以前后的进程ID并未改变,exec只是用一个全新的程序替换了当前进程的正文、数据、堆和栈段多线程程序里不准使用fork :为什么???UNIX上C++程序设计守则3准则3:多线程程序里不准使用fork在多线程程序里,在”自身以外的线程存在的状态”下一使用fork的话,就可能引起各种各样的问题.比较典型的例子就是,fork出来的子进程可转载 2016-12-18 11:51:58 · 404 阅读 · 0 评论