
Linux
文章平均质量分 68
qq_41606926
这个作者很懒,什么都没留下…
展开
-
信号基础知识
信号的机制 进程A给进程B发送信号,进程B收到信号之前执行自己的代码,收到信号后,不管执行到程序的什么位置,都要暂停运行,去处理信号。处理完毕以后再继续执行,与硬件中断类似(软中断),每个进程收到的所有信号,都是由内湖负责发送的。信号的处理方式执行默认动作 忽略信号(丢弃不处理) 捕捉信号(调用用户的自定义的处理函数)信号相关函数signal函数:作用:注册信号捕捉(处理)函数 函数原型 typedef void(*sighandler t)(int);...原创 2021-08-23 15:03:06 · 364 阅读 · 0 评论 -
内存映射区
存储映射I/O 使一个磁盘文件与存储空间中的一个缓冲区相映射。从缓冲区中取数据,就相当于读文件中的相应字节;将数据写入缓冲区,则会将数据写入文件。这样,就可以在不使用read和write函数的情况下,使用地址(指针)完成I/O操作。mmap函数void *mmap(void *addr,size_t length, int prot, int flags , int fd, off_t offset);参数:addr:一般传NULL,表示让内核去指定一个内存起始地址...原创 2021-08-20 10:00:57 · 305 阅读 · 0 评论 -
进程间通信(FIFO管道)
FIFO常被称为命名管道,以区分pipe,pipe只能用于“有血缘关系”的进程间通信。但通过FIFO,不相关的进程也能交换数据。 FIFO是linux基础文件类型中的一种(文件类型为p,可通过ls -l查看文件类型),但FIFO文件在磁盘上没有数据块,文件大小为0,仅仅用来标识内核中一条通道。进程可以打开这个文件进行read/write,实际上是在读写内核缓冲区,这样就实现了进程间通信。创建FIFO管道进程间通信流程进程A 创建一个fifo文件,使用mkf...原创 2021-08-19 22:11:31 · 455 阅读 · 0 评论 -
进程间通信(pipe管道)
Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷贝到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制成为进程间通信(IPC)进程间通信的方式最常用:管道(最简单) 信号(开销最小) 共享映射区(无血缘关系) 本地套接字 (最稳定) 管道管道的原理:管道的实...原创 2021-08-19 21:10:13 · 271 阅读 · 0 评论 -
进程的创建回收
Linux的进程控制块就是task_struct结构体。创建进程:fork函数:函数作用:创建子进程 原型:pid_t fork(void); 返回值:调用成功:父进程返回子进程PID,子进程返回0 调用失败:返回-1,设置erno值 测试全局变量在父子进程中是否可以共享: 不可以共享,所以就不能使用全局变量进行通信。实例代码: 1 //测试全局变量是否可以共享 2 #include<std...原创 2021-08-19 15:07:51 · 109 阅读 · 0 评论 -
文件操作相关函数
stat/lstat函数函数描述:获取文件属性函数原型:int stat(const char* pathname,struct stat *buf); int lstat(const char* pathname,struct stat *buf);返回值 0 OR 1struct stat:stat简单练习: #include<stdio.h> #include<stdlib.h> #incl...原创 2021-08-18 15:11:13 · 212 阅读 · 0 评论 -
Linux文件IO
库IO函数的工作流程使用fopen函数打开一个文件,返回的是一个FILE *fp指针,指针指向三个重要组成成员:文件描述符:描述符中定义了文件的Inode,通过Inode可以找到对应的数据块 文件指针:读和写共享一个文件指针,读或者写都会引起文件指针的变化 文件缓冲区:减少对磁盘的读写次数。在linux中 /usr/include 文件夹中找到 stdio.h的第48行找到 typedef struct IO_FILE FILE; //FILE *p在li...原创 2021-08-16 10:55:36 · 129 阅读 · 0 评论 -
GDB调试
GDB(GNU Debugger)是GCC调试工具,功能强大:生成调试信息: 一般来说GDB主要用于调试 C/C++程序。在编译时,我们必须要把调试信息加到可执行文件中。gcc -g hello.c hello启动GDB启动gdb: gdb program(program:执行文件,一般在当前目录下) 设置运行参数(set args, show args) 启动程序(run 开始执行到断点处, start:程序向下执行一行)断点操作设置断...原创 2021-08-15 14:47:35 · 107 阅读 · 0 评论 -
makefile
1.makefile: makefile文件是用来管理项目工程文件,通过执行make命令,make就会解析并执行makefile文件。 makefile命名:makefile或者Makefile1.1makefile的基本规则#目标:依赖#(tab)命令main:main.c fun1.c fun2.c sum.c gcc -o main main.c fun1.c fun2.c sum.cmain:main.o fun...原创 2021-08-14 09:09:22 · 95 阅读 · 0 评论 -
共享库(shared library)/动态库
共享库在程序编译时并不会被链接到目标代码中,而是在程序运行时才载入。不同程序需要相同的库时,在内存中只需要有一份该共享库的拷贝,避免了空间浪费问题。并且在运行时才会被载入,也解决了静态库对程序的更新,部署和发布带来的麻烦共享库的制作:1. 将.c文件编译成.o文件gcc -fpic -c fun1.c fun2.c2.使用gcc将.o文件编译成库文件gcc -shared fun1.o fun2.o -o litest2.so#注意与静态库的不同 gcc -shar...原创 2021-08-13 16:20:53 · 4065 阅读 · 0 评论 -
静态库的制作和使用
静态库的制作: 1.将.c文件编译成.o文件gcc -C fun1.c fun2.c#生成两个文件 fun1.o fun2.o 2.使用ar命令将.o文件打包成.a文件ar rcs libtest1.a fun1.o fun2.o静态库的使用: 1.mian.c与head.h和libtest1.a在同一级目录的情况gcc -o main1 main.c -I./ -L./ -ltest12.main.c与hea...原创 2021-08-13 15:19:34 · 94 阅读 · 0 评论