![](https://img-blog.csdnimg.cn/20190918140158853.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux-c
文章平均质量分 80
linux-c
Yengi
谢谢关注,欢迎交流分享。
展开
-
常用的shell脚本操作
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。(2)等号两侧不能有空格(3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。(4)变量的值如果有空格,需要使用双引号或单引号括起来。(5)可把变量提升为全局环境变量export 变量名。原创 2023-03-02 11:27:42 · 2835 阅读 · 0 评论 -
网络编程中的IO模型
如果在设置了非阻塞之后,再去进行阻塞的函数操作,那么会返回一个错误,EAGAIN。原创 2022-09-21 11:32:20 · 323 阅读 · 0 评论 -
socket编程常用API
典型的UDP客户/服务器程序的函数调用:典型的TCP客户/服务器程序的函数调用:TCP可靠传输2.bind() 绑定套接字与网络地址(把一个本地协议地址赋予一个套接字)1.通用地址结构体的定义:2.特殊地址结构体 —— IPv4 地址结构体:3.特殊地址结构体 —— IPv6 地址结构体:4.特殊地址结构体 ——UNIX 域地址结构体:3.connect() 建立连接调用connect前不必非得调用bind,如果没有bind,内核会确定源IP并选择一个临时端口作为源端口如果原创 2022-06-29 20:30:39 · 3352 阅读 · 0 评论 -
Linux线程之线程池
线程池是一种多线程的处理形式,处理过程中将任务添加到任务队列中,然后创建线程后启动这些任务注意:1,任务队列中刚开始没有任何任务,是一个具有头结点的空链队列。2,使用互斥锁来保护这个队列。3,使用条件变量来代表任务队列中的任务个数的变化——将来如果主线程往队列中投放任务,那么可以通过条件变量来唤醒那些睡着了的线程。4,通过一个公共开关——shutdown,来控制线程退出,进而销毁整个线程池。1、线程池相关的结构体一个任务的结构体任务节点,包含需要执行的函数及其参数,通过链表连成一个任务队列线程池实例,包含原创 2022-06-27 17:46:58 · 594 阅读 · 0 评论 -
Linux线程安全
1,使用 sem_open( )来创建或者打开一个有名信号量。2,使用 sem_wait( )和 sem_post( )来分别进行 P 操作和 V 操作。3,使用 sem_close( )来关闭他。4,使用 sem_unlink( )来删除他,并释放系统资源。3.P、V操作sem_wait\sem_post4.关闭删除有名信号量5.testj.cr.c二、POSIX无名信号量解决的是一个进程内部的线程间的同步互斥,那么也许不需要使用有名信号量,因为这些线程共享同一个内存空间,我们可以定义更原创 2022-06-27 16:41:20 · 1223 阅读 · 0 评论 -
Linux系统线程POSIX
由于进程的地址空间是私有的,因此系统开销比较大,当有很多相同资源被多个进程使用的时候,系统内存占用比较大,为了提高系统运行程序的性能,调高任务切换的效率,引入轻量级进程的概念,这个就是线程。进程是系统资源分配的基本单位线程是系统任务调度的基本单位①、一个进程可以有多个线程,共享以下资源:(1)静态数据(2)进程中打开的文件描述符(3)信号处理函数(4)当前路径(5)可执行指令(6)用户ID和用户组ID②、不可共享(线程私有资源)(1)线程ID(2)程序计数器和相关的寄存器(3)线程任务函数里面的局部变量原创 2022-06-10 19:03:16 · 565 阅读 · 0 评论 -
Linux系统进程间通信
①无名管道(PIPE)和有名管道(FIFO)②信号(signal)③system V-IPC 之共享内存④system V-IPC 之消息队列⑤system V-IPC 之信号量⑥套接字socket特点:无名管道是最简单的常用于一对一的亲缘进程间通信的方式有名管道存在于文件系统之中,提供写入原子性特征,信号是唯一一种异步通信方式共享内存的效率最高,但是要结合信号量等同步互斥机制一起使用消息队列提供一种带简单消息标识的通信方套接字是一种更为宽泛意义上的进程间通信方式——它允许进程间跨网络特点:1,没有名字,因原创 2022-06-09 19:41:42 · 570 阅读 · 0 评论 -
Linux系统进程间通信基础
①无名管道(PIPE)和有名管道(FIFO)②信号(signal)③system V-IPC 之共享内存④system V-IPC 之消息队列⑤system V-IPC 之信号量⑥套接字socket特点:无名管道是最简单的常用于一对一的亲缘进程间通信的方式有名管道存在于文件系统之中,提供写入原子性特征,信号是唯一一种异步通信方式共享内存的效率最高,但是要结合信号量等同步互斥机制一起使用消息队列提供一种带简单消息标识的通信方套接字是一种更为宽泛意义上的进程间通信方式——它允许进程间跨网络特点:1,没有名字,因原创 2022-06-08 18:16:31 · 195 阅读 · 0 评论 -
Linux系统进程控制基础
什么是程序?什么是进程?程序和进程的区别进程控制块结构体声明在:/usr/include/linux/sched.h进程和程序的区别? (1)位置不一样:程序文件放在外部存储器,进程在内存中(正在运行的程序) (2)程序文件:静态的,进程:动态的 (1)查看进程树,以树形图显示进程:pstree (2)除了系统初始init进程以外,任何进程都必须有父进程 (3)如果一个进程的父进程死掉,那么这个进程就会被系统分配一个默认父进程给它 (1)./程序文件名 前台进程原创 2022-06-06 18:36:29 · 182 阅读 · 0 评论 -
动态库静态库制作
文章目录库(函数库)动态库动态库的制作动态库编译命令:静态库静态库的制作库(函数库)将已经实现的某些功能函数封装到一起形成函数库,方便调用, 并对代码进行加密保护.(将功能函数封装,不要将main函数封装进去)动态库libname.so特点:(1) 库里面的代码并不会编译到可执行文件中, 动态库的可执行程序相对较小.(2) 由动态库编译的程序,需要运行这个程序的系统环境变量中需要有这个库文件,否则运行不了.动态库的制作gcc -shared -fPIC -o libnam.原创 2022-01-20 18:45:58 · 593 阅读 · 0 评论 -
数据结构三大查找算法(二分查找、插值查找、斐波那契数列查找)C语言实现
文章目录查找二分查找(折半查找)插值查找斐波拉契查找注意:查找查找是在大量的信息里面寻找一个特定的信息元素(1)静态查找和动态查找;静态或者动态都是针对查找表而言的。动态表指查找表中有删除和插入操作的表(2)无序查找和有序查找。无序查找:被查找数列有序无序均可;有序查找:被查找数列必须为有序数列。二分查找(折半查找)说明:元素必须是有序的,如果是无序的则要先进行排序操作基本思想:也称为是折半查找,属于有序查找算法。用给定值k先与中间结点的关键字比较,中间结点把线形表分成两个子表,若相等原创 2022-05-27 15:52:47 · 855 阅读 · 0 评论 -
数据结构排序算法 内部排序(冒泡、鸡尾酒、选择、简单插入、二分插入、快排、希尔、归并、堆排)C语言实现
文章目录排序冒泡排序鸡尾酒排序选择排序:排序冒泡排序1、比较相邻的元素,如果前一个比后一个大或者小,就把它们两个交换位置。2、对每一对相邻的元素做同样的工作,从开始第一对到最后一对,这步做完之后,最后的元素会是最大或者最小的数。3、针对所有的元素重复以上的步骤,除了最后一个4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。空间复杂度:O(1)时间复杂度:O(n^2)void swap1(int *a,int i,int j){ int tmp = a[i];原创 2022-05-25 18:43:17 · 206 阅读 · 0 评论 -
树的特点及相关操作
文章目录树树的特点:二叉树二叉树的特点:BST 就是二叉搜索树(Binary Search Tree)实现二叉树自平衡树AVL树 树,指的是在一堆数据中,包含一个被称为根的节点,其他的节点组成若干棵树,成为根节点的后继 A) 双亲节点(parent)和孩子节点(children):一个节点的后继节点被称为该节点的孩子,相应地该节点被称为这些孩子的双亲。比如上图中的 A 是 B、C 和 D 的双亲,而 B、C 和 D 都是 A 的孩子 B) 兄弟节点(sibling):拥有原创 2022-05-23 19:10:18 · 965 阅读 · 0 评论 -
栈、队列的应用(栈实现队列,队列实现栈,球钟问题)
栈、队列的应用 C语言1.用两个栈来实现一个队列#include <stdio.h>#include <stdlib.h>#include <stdbool.h>typedef int DataType;//数据节点结构体typedef struct node{ DataType data; //数据 struct node *next; //指针}LinkNode;//管理结构体typedef struct stack{ stru原创 2022-05-20 19:18:18 · 314 阅读 · 0 评论 -
队的特点及相关操作
1、队列特点(FIFO) 数据满足“先进先出,后进后出”存取特点的数据结构 (1)逻辑结构:线性 (2)存储结构:顺序,链式 (3)运算:初始化,入队,出队,对空,队满判断(顺序队列)顺序队列队列管理结构体#include <stdio.h>#include <stdlib.h>#include <stdbool.h>typedef int DataType;//队列管理结构typedef struct no原创 2022-05-19 20:37:20 · 332 阅读 · 0 评论 -
栈的特点和相关操作
1.栈的特点(LIFO) 数据存取关系满足“后进先出,先进后出”的特点的数据结构 逻辑结构:线性 存储结构:顺序存储、链式存储 算法:初始化、压栈、出栈、栈空、栈满判断(顺序栈)如果有1 2 3 三个数据,依次入栈,出栈情况,错误的是?A 1 2 3B 1 3 2C 2 3 1D 2 1 3E 3 2 1F 3 1 22、顺序栈存储结构连续的,用数组的方式顺序栈的管理结构体#include <stdio.h>#include &l原创 2022-05-19 20:24:08 · 2008 阅读 · 0 评论 -
栈的应用:括号匹配(C语言)
#include <stdio.h>#include <stdlib.h>#include <stdbool.h>typedef char DataType;//数据节点结构体typedef struct node{ DataType data; struct node *next;}LinkNode;//管理结构体typedef struct stack{ LinkNode *top; //栈顶偏移 int size; //原创 2022-05-19 15:46:02 · 347 阅读 · 0 评论 -
linux内核链表,内核链表详解,内核链表封装
常规链表的缺陷 传统的双向循环链表概念简单,操作方便,但存在有致命的缺陷,用一句话来概括就是:每一条链表都是特殊的,不具有通用性。换句话说,对于每一种不同的数据,所构建出来的传统链表都是跟这些数据相关的,所有的链表操作函数也都是数据相关的,换一种数据节点,则所有的操作函数都需要一一重写编写,这种缺陷对于一个具有成千上万种数据节点的工程来说是灾难性的,是不可接受的Linux内核链表的原理(1)把传统链表中的“链”抽象出来,使之成为一条只包含前后指针的纯粹的双循环链表,这样的链表由于不含原创 2022-05-18 13:56:18 · 1052 阅读 · 0 评论 -
约瑟夫环问题,单向循环链表解决
#include <stdio.h>#include <stdlib.h>typedef int Datatype;typedef struct Node{ Datatype data; struct Node *next; }ListNode;ListNode * InitNode(Datatype data) //带数据的头节点{ ListNode * head=(ListNode *)malloc(sizeof(ListNode)); if(he原创 2022-05-17 11:11:56 · 174 阅读 · 0 评论 -
数据结构之链表操作(单链表,单向循环链表,双向循环链表)查找节点,插入节点,删除节点,更新节点,新建节点,遍历,清空,判断空链表等操作
一、线性表线性表结构的数据是依次排列(一对一)(1)顺序结构:数组,顺序栈,顺序队列(顺序表)(2)链式存储:链表,链式栈,链式队列(线性表)二、链表2.1、链表 链表是一种具体的数据结构 1、逻辑上:一对一的排列 2、存储上:非连续的 3、算法:查找节点,插入节点,删除节点,更新节点,新建节点,遍历,清空,判断空链表等等 4、链表分类 单向链表,双向链表,单向循环链表,双向循环链表 5、链式存储特点 不需要一块连续原创 2022-05-16 20:15:28 · 2080 阅读 · 0 评论 -
lcd屏幕显示bmp、jpg图片
文章目录BMP图片显示:jpeg压缩过程RGB:ARGB 32bit 4ByteA:【24-31】R:【16-23】G:【8-15】B:【0-7】图片显示显示思路:(1)打开液晶屏(open),进行内存映射(mmap)(2)打开图片,读取颜色数据(3)将读取到的颜色数据映射到液晶屏(4)关闭图片文件,液晶屏,解除内存映射BMP图片显示:没有经过压缩的二进制位图文件,文件较大,获取颜色数据方便一张800*480的bmp格式的图片8004803 = 1152000Byt原创 2022-05-09 21:57:40 · 5036 阅读 · 0 评论 -
常见的shell命令
文章目录常用的shell命令一、终端的使用1、打开2、关闭3、放大或者缩小4、在终端上复制5、关闭当前进程(强制)二、shell命令(所有的命令输入完毕,按回车键执行)1、管理员权限的切换2、退出管理员3、临时使用管理员权限4、man(manual)5、ls(list) 查看指定路径的文件信息6、cat/tac/less/more(查看文件内容)7、rm(remove) 删除文件、目录8、mkdir/rmdir(make/remove directory) 创建目录、删除空目录(rmdir只能删除空目录)9原创 2022-05-06 08:55:13 · 5856 阅读 · 0 评论 -
Linux文件属性
文件属性stat获取文件信息// 功能// 获取文件的元数据(类型、权限、大小等等……)// 头文件#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>// 原型int stat(const char *path, struct stat *buf);int fstat(int fd, struct stat *buf);int lstat(const char*path, st原创 2022-04-28 23:22:28 · 1333 阅读 · 0 评论 -
C语言标准IO
文章目录一、文件指针1、fopen打开文件,得到这个文件的文件指针2、fclose关闭文件3、每次一个字符的读写fgetc,fputc,feof,ferror注意:4、每次一行的读写 fgets,fputs注意:安全gets:5、每次读写若干数据块 fread,fwrite注意:6、获取或设置文件当前位置偏移量fseek,ftell,rewind注意:7、标准格式化IO,fprintf,sprintf,fscanf,scanf注意:一、文件指针FILE指针:每个被使用的文件都在内存中开辟出一个区域,用来原创 2022-04-28 22:46:15 · 3151 阅读 · 0 评论 -
用C语言获取当前系统时间,年、月、日、时、分、秒;格式为 yyyy-MM-dd HH:mm:ss
C语言获取当前系统时间,格式为 yyyy-MM-dd HH:mm:ss#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#define BUF_SIZE 200typedef struct { int year; int month; int day; int hour; int minute; int second;}Time_YMD_原创 2022-04-28 17:24:36 · 12246 阅读 · 0 评论 -
系统文件IO
在Linux中,有一句经典的话叫做:一切皆文件。在 Linux 中,文件总共被分成了 7 种,他们分别是:1,普通文件(regular):存在于外部存储器中,用于存储普通数据。【-】2,目录文件(directory):用于存放目录项,是文件系统管理的重要文件类型。【d】3,管道文件(pipe):一种用于进程间通信的特殊文件,也称为命名管道 FIFO。【p】4,套接字文件(socket):一种用于网络间通信的特殊文件。【s】5,链接文件(link):用于间接访问另外一个目标文件,相当于 Windows 快捷方原创 2022-04-26 17:37:35 · 194 阅读 · 0 评论 -
头文件和宏定义
文章目录一、头文件头文件的正文内容注意:头文件写法文件引用头文件引用<>和””的区别?Makefile:工程管理器二、宏编译过程:基本语法命名规则:说明:\#undef 宏名预定义宏:带参宏:说明:宏延续运算符 \带参宏和函数的区别:字符串常量化标记粘贴运算符一、头文件 在编写源码过程中,随着功能的复杂,所使用的各种函数模块和其他相关的技术会迅速增加,如果所有的代码都放在源文件.c里面,会显得组织难以维护,互相引用非常 频繁,尤其是大家都要用到的部分内容(比如:函数声明,结构体模板原创 2022-04-23 16:31:16 · 3396 阅读 · 0 评论 -
组合数据类型
文章目录组合数据类型一、结构体1、基本语法语法:2.结构体定义一个变量3.结构体变量的初始化和赋值:结构体的定义和初始化:指定成员初始化的好处:结构体变量成员的访问结构体包含特殊成员结构体成员包含数组结构体包含结构体变量结构体数组结构体指针组合数据类型一、结构体 C语言中提供了众多的基本数据类型,但是现实生活中的对象一般都不是单纯的整型,浮点型或者字符串,而是这些基本数据类型的综合体。比如一个学生,典型地应该拥有学号(整型),姓名(字符串),分数(浮点型),年龄(整型),性别(字符串)等不同的侧面属原创 2022-04-21 19:12:57 · 1084 阅读 · 0 评论 -
liunx 内存管理
文章目录liunx 进程管理一、虚拟地址PM(Physical Memory):物理内存VM(Virtual Memory):虚拟内存随机将一个进程的虚拟内存放大来看,它会包含以下内容:虚拟内存的典型布局二、进程内存布局1.栈内存:2.堆内存:3.数据段:.bss段:.data段:.rodata段:注意:4.代码段:.text段:.ini段:注意:三、堆(heap)1.堆内存的生命周期2.堆内存的申请和释放(堆内存操作API)malloc()、free() 、calloc()、realloc()2.1原创 2022-04-19 19:39:24 · 839 阅读 · 0 评论 -
C语言字符串
文章目录字符串:1、c语言中表示一个字符串:字符串的输入和输入:如何用scanf输入带空格的字符串?2、char型指针和char型数组的区别3、字符串长度获取strlen4、字符串拷贝strcpy5、字符串拼接strcat注意:要求前面字符串申请的地址空间足够长,必须容纳两个字符串,否则会越界6、字符串的比较strcmp字符串比较是要区分大小写strncmp比较的是前n个字符相不相同,而不是第n个字符相不相同7、strstr判断字符串时候有某个字符串8、strtok 分割字符串 同sscanf9、strch原创 2022-04-18 20:17:29 · 2914 阅读 · 0 评论 -
C语言指针
指针一、什么是指针指针就是存放地址的变量内存地址: 字节:内存的容量单位,Byte,一个字节有8位,1Byte == 8bits 地址:为了能让程序能够有效的访问这些内存,计算机为内存中的每一个字节进行编号,称内存地址,简称地址基地址: 单字节数据:对于单字节数据而言,基地址就是其所在内存的字节编号 多字节数据:对于多字节数据而言,基地址就是其所有字节在内存中地址编号最小的那个,称为基地址取址符:& 每个变量都是一块内存,都是可以通过取址符获取其地址(基地址)原创 2022-04-14 20:18:05 · 1026 阅读 · 0 评论 -
C语言运算符和逻辑表达式
文章目录运算符和表达式:一、算术运算符:注意:自增和自减,分前缀和后缀两种情况:二、关系运算符:attention:在C语言中,非零即真三、逻辑运算符:attention:特殊规则:四、位运算符attention:五、赋值运算符attention:六、内存存取运算符七、特色运算符1、三目运算符2、sizeof3、return运算符4、()函数调用5、,逗号运算符八、优先级优先级:结合性:运算符和表达式:一、算术运算符:注意: 1.减号也可以做负号,做取负运算的时候,放在一个变量的前面表示这个变量的原创 2022-04-14 14:52:33 · 5062 阅读 · 0 评论 -
C语言数组
文章目录数组:一、数组初始化:注意:二、数组名的含义地址偏移访问数组元素三、一维数组注意:四、二维数组(多维数组)二维数组的定义示例:二维数组初始化二维数组的元素访问数组的万能拆解法:示例:二维数组的传参字符数组传参数组:一、数组初始化:int a1[5] = {1, 2, 3, 4, 5};int a3[] = {1, 2, 3};//OK,自动根据给定的初始化列表的元素个数,来分配数组的长度int a4[5] = {1, 2, 3};//OK,只初始化数组元素的一部分,另外的默认初始化为0原创 2022-04-13 20:56:29 · 820 阅读 · 0 评论 -
C语言控制流
文章目录一、顺序结构二、分支结构注意:三、switch语句总结分析:一、顺序结构从main函数开始,到程序结束,中间没有任何分支,循环二、分支结构逻辑:限制程序中某一些代码块的执行,必须要满足某种条件才可执行注意:1.if语句可以单独使用,else语句不可以,必须跟if语句配对使用2.不管是if还是else,下面的语句都用大括号括起来,否则只有首句有效三、switch语句逻辑:根据不同的条件执行不同的语句总结分析: 1、switch在执行的时候先判断switch括号里面的表达式原创 2022-04-12 20:59:55 · 382 阅读 · 0 评论 -
C语言函数
文章目录函数形参与实参的关系:函数调用的内存逻辑局部变量与栈内存局部变量的特点:栈内存的特点:技术要点:static关键字和静态函数静态变量:静态函数:要点:使用递归的条件设计一个递归算法注意:递归是一个函数嵌套调用的过程,递归次数越多,运行时间会大幅度增加,内存空间也会大量占用,所以,一般能用循环解决的,我们就不考虑递归缺点:**效率低**,**还比较占内存**递归算法的一般应用函数形参与实参的关系: 实参和形参位于不同的内存区域,彼此独立 形参变量只有在函数被调用的时候,才会分配内存,原创 2022-04-12 20:43:34 · 790 阅读 · 0 评论 -
typedef 取别名 linuxc
typedef 指针 函数原创 2022-01-23 20:09:38 · 524 阅读 · 0 评论