avatar
Articles
14
Tags
14
Categories
4

嵌入式知识库

嵌入式知识库

02进程间的通信
Created2024-08-28|05进程间的通信
02.进程间的通信[TOC] 1、管道1.1、无名管道(1)创建无名管道1234#include <unistd.h>int pipe(int pipefd[2]);//参数 一个至少具有 2 个int 型数据的数组,用来存放 PIPE 的读写端描述符//返回值 成功 0 失败 -1 (2)无名管道特征 ①没有名字,因此无法使用 open( )。 ②只能用于亲缘进程间(比如父子进程、兄弟进程、祖孙进程……)通信。 ③半双工工作方式:读写端分开。 ④写入操作不具有原子性,因此只能用于一对一的简单通信情形。 ⑤不能使用 lseek( )来定位。 1.2、有名管道(1)创建有名管道12345#include <sys/types.h>#include <sys/stat.h>int mkfifo(const char *pathname, mode_t mode);//参数 pathname:FIFO的文件名 mode:文件权限//返回值 成功 0 失败 -1 (2)有名管道特征 ①有名字,存储于普通文件系统之中。②任何具有相应权限的进程都可以使用 ...
12.1动态库
Created2024-08-28|02C语言
一、动态库1、创建动态库 -I 查看头文件所在目录(大i) 2、编译源文件并链接到库文件 3、设置环境变量3.1临时设置:在命令行中进入你的动态库文件所在路径:1export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd) 如果你当前工作路径不在库文件所在的路径:1export LD_LIBRARY_PATH=/mnt/hgfs/CQ2012/02_C语言/12_动态库与静态库/code/dynamic 3.2永久设置第一种:直接将我们的动态库文件复制到系统的lib目录下 (/lib/ 或者 /usr/lib/) sudo cp libmylib.so /lib/ 第二种:将环境变量设置到系统的一个配置文件中 /etc/bash.bashrc ①sudo gedit /etc/bash.bashrc ②找到文件末尾,换行写入: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH ...
11高级议题
Created2024-08-28|02C语言
一、宏1.#define的使用1.1预处理 编译 汇编 链接1预处理:gcc define.c -o define.i -E 编译生成.i文件,使代码停留在这个阶段 1.2标识符命名规则①只能由数字、字母、下划线组成 ②不能以数字开头 ③不能是C语言关键字 15za _he xxx A#a b^sss sdfg2 a_af2* break 1.3 宏延续运算符 \ 表示逻辑上连成一行12#define d(x, y) x = (7 + \ y + x) 2.define定义常量宏2.1基本用法12#define N 100#define PI 3.14 2.2取消宏标识符PI的声明1#undef PI 3.define的带参宏3.1宏定义的表达式都加上括号,传入参数可能是表达式1#define X(a) ((a) * (a)) 防止参数类型不一致,typeof(a) 获取表达式a的结果类型,定义一个变量存储它的值 {}把这一段看成一个整体 (void)(&_a == &_b); 检查两个比较参数 ...
01单向链表
Created2024-08-28|04数据结构
一、单向链表链表结构体123456typedef int DataType;typedef struct Node{ DataType data;//数据域 struct Node *next;//指针域}linknode; 1、初始化链表 12345678910// 初始化链表struct Node *init_list(void){ struct Node *head = malloc(sizeof(struct Node)); if(head != NULL) { head->next = NULL; return head; } return head;} 2、创建一个节点1234567891011// 创建一个新节点struct Node *create_node(DataType data){ struct Node *new = malloc(sizeof(struct Node)); if(new != NULL) { new->data = data; ...
02单向循环链表
Created2024-08-28|04数据结构
二、单向循环链表链表结构体123456typedef int DataType;struct Node{ DataType data;//数据域 struct Node *next;//指针域}; 1、初始化链表 12345678910// 初始化链表struct Node *init_list(void){ struct Node *head = malloc(sizeof(struct Node)); if(head != NULL) { head->next = head; return head; } return head;} 2、创建一个节点 1234567891011// 创建一个新节点struct Node *create_node(DataType data){ struct Node *new = malloc(sizeof(struct Node)); if(new != NULL) { new->data = data; // 类型都是DataType, ...
03链表管理结构体
Created2024-08-28|04数据结构
三、链表管理结构体123456struct List{ struct Node *head; struct Node *tail; int len;}; 1、初始化链表123456789101112131415161718// 初始化链表struct List * init_list(void){ struct List *list = malloc(sizeof(struct List)); if(list == NULL) { return NULL; } // 分配头节点空间 list->head = malloc(sizeof(struct Node)); if(list->head == NULL) return NULL; list->tail = list->head; list->len = 0; return list;} 2、尾插1234567// 尾插void insert_tail(struct Node *new, struct List * list) ...
04双向循环链表
Created2024-08-28|04数据结构
一、双向循环链表链表结构体123456789typedef int DataType;//双向循环链表节点结构体声明typedef struct Node{ DataType data;//数据域 struct Node *prev;//指针域 struct Node *next;}linknode; 1、初始化链表1234567891011// 初始化链表linknode *init_list(void){ linknode *head = malloc(sizeof(linknode)); if(head == NULL) return NULL; head->next = head; head->prev = head; return head;} 2、创建一个节点123456789101112// 创建一个节点linknode *create_node(DataType data){ linknode *new = malloc(sizeof(linknode)); if(new == NULL) return ...
05内核链表
Created2024-08-28|04数据结构
五、内核链表1、使用方法链表结构体12345678typedef int DataType;//双向循环链表节点结构体声明typedef struct Node{ DataType data; struct list_head list;}linknode; 1、初始化链表12345678910// 初始化链表linknode *init_list(void){ linknode *head = malloc(sizeof(linknode)); if(head == NULL) return NULL; INIT_LIST_HEAD(&head->list); return head;} 2、创建节点123456789101112// 创建节点linknode *create_node(DataType data){ linknode *new = malloc(sizeof(linknode)); if(new == NULL) return NULL; INIT_LIST_HEAD(&new-> ...
06顺序栈
Created2024-08-28|04数据结构
一、顺序栈栈结构体12345678910typedef int Datatype;//顺序栈的管理结构体声明typedef struct Sequent_stack{ Datatype *stack;//表示栈结构的空间起始地址 int size;//栈的大小,最多能放元素的个数 int top;//栈顶偏移}seqStack; 1、栈初始化123456789101112131415161718// 栈初始化seqStack *init_stack(int size){ seqStack *s = malloc(sizeof(seqStack)); if(s != NULL) { s->stack = malloc(sizeof(Datatype) * size); if(s->stack == NULL) { free(s); return NULL; } s->size = size; s->top = -1; } return s;} 2、判断栈满1234 ...
07链式栈
Created2024-08-28|04数据结构
一、链式栈链式栈管理结构体12345678910111213141516typedef int Datatype;//链式栈节点struct Node{ Datatype data; struct Node *next;};// 链式栈管理结构体typedef struct link_stack{ int size; //元素个数 struct Node *top; //栈顶}linkStack; 1、初始化栈123456789101112// 初始化栈linkStack *init_stack(void){ linkStack *s = malloc(sizeof(linkStack)); if(s != NULL) { s->size = 0; s->top = NULL; } return s;} 2、判断栈空123456// 判断栈空bool is_empty(linkStack *s){ // return s->top == NULL; return s-> ...
12
avatar
YQL
Articles
14
Tags
14
Categories
4
Follow Me
Announcement
This is my Blog
Recent Post
02进程间的通信2024-08-28
12.1动态库2024-08-28
11高级议题2024-08-28
01单向链表2024-08-28
02单向循环链表2024-08-28
Categories
  • 02C语言2
  • 03IO编程4
  • 04数据结构7
  • 05进程间的通信1
Tags
02C语言/动态库 03IO编程/标准IO 02C语言/11高级议题 04数据结构/链表管理结构体 04数据结构/单向链表 04数据结构/链式栈 04数据结构/内核链表 03IO编程/系统IO 04数据结构/单向循环链表 04数据结构/双向循环链表 03IO编程/目录 03IO编程/文件属性 05系统编程/进程间的通信 04数据结构/顺序栈
Archives
  • August 202414
Info
Article :
14
UV :
PV :
Last Update :
©2020 - 2024 By YQL
Framework Hexo|Theme Butterfly