![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
UNIX
luuyiran
code from 2018
展开
-
链表的应用
链表在我们的实际开发项目中有着广泛的应用,Linux内核实现了一个精妙的链表,可以方便地嵌入到任何一个数据结构中,而不用为每个数据结构单独写一个插入、删除等操作。本文参照内核链表实现,实现了一个更加精炼的链表实现,剔除了不常用的操作,保留最常用的插入、删除、遍历操作,重写或修改了链表结构、插入删除函数,使实现更为精炼、清晰。嵌入位置放在结构体起始位置,由于结构体第一个变量的地址和整体结构体的地址一致,这样方便我们从节点类型到结构体类型的转换,具体见下文的测试用例。链表和结构体定义:typedef s原创 2021-01-19 12:59:54 · 1347 阅读 · 0 评论 -
Bresenham‘s line algorithm 布雷森汉姆直线算法
1、线性方程首先我们假设要绘画的直线斜率大于0小于1.截距式直线方程如下:y=f(x)=mx+by=f(x)=mx+by=f(x)=mx+b现在我们要从点(x0,y0)(x_0,y_0)(x0,y0)到点(x1,y1)(x_1,y_1)(x1,y1)画一条直线,该直线的斜率有:m=y1−y0x1−x0=ΔyΔxm=\frac{y_1-y_0}{x_1-x_0}=\frac{\Delta y}{\Delta x}m=x1−x0y1−y0=ΔxΔy所以我们有:y=ΔyΔxx+b原创 2020-09-08 01:15:32 · 758 阅读 · 0 评论 -
Makefile常用参数
一、make编译过程//预处理,#开头的代码全被解决掉(预编译,包含库,宏定义等等)hello.i上千行.gcc -E hello.c >> hello.i//编译,检查语法错误,生成.s文件,汇编代码,大概26行.gcc -S hello.i//汇编。产生后缀.o的object目标文件,二进制,不可以运行,缺少库信息.gcc -c hello.s总结:预处理.i => 编译.s => 汇编.o => 链接二、常见参数-f :执行make的时候,原创 2020-08-24 10:49:56 · 2965 阅读 · 0 评论 -
美化makefile输出
以learningOpenGL练习代码为例,目录结构如下:LearnOpenGL │───── include │ ├─ glad //glad头文件 │ ├─ GLFW //GLFW库头文件 │ └─ KHR //glad头文件 │────── llib │ ├─ libglad.a //glad.c编译成了静态库 │原创 2020-08-22 12:38:24 · 277 阅读 · 0 评论 -
在编译期效验结构体偏移和结构体大小
sizeof和offsetof会返回无符号数据,与size相减会转为无符号数,导致数组定义过大,从而编译失败。#include <stdio.h>#include <stddef.h>//long unsigned int#define ASSERT_OFFSET(type, member, size) \static inline assertOffSetOf##member(){\ char up[offsetof(type,member) - size原创 2020-05-28 21:48:39 · 559 阅读 · 0 评论 -
数组在内存中是连续存放的吗
用栈声明的时候很明显,都是连续的。在堆上的时候,由于是分批次分配内存(首先new出或malloc多少行,然后每一行再分别new),因此其存放是平行的几条连续存储,每一行是连续的,行与行之间并不连续。为此,我们尝试创建一个2X4的二维矩阵如下A B C DE F G H打印其地址来证明。代码如下,为了直观,略去了一些安全检查。#include <stdio.h>#include <stdlib.h>#include <iostream>using names原创 2020-05-28 18:45:38 · 10070 阅读 · 2 评论 -
Linux设备驱动程序
第一章 设备驱动程序简介 设备驱动程序在Linux内核中扮演着特殊的角色。它们是一个个独立的“黑盒子”,使某个特定硬件响应一个定义良好的内部编程接口,这些接口完全隐藏了设备的工作细节。用户的操作通过一组标准化的调用执行,而这些调用独立于特定的驱动程序。将这些调用映射到作用于实际硬件的设备特有操作上,则是设备驱动程序的任务。这个编程接口能够使得驱动程序独立于内核的其他部分而建立,必要的情况下可在...原创 2020-03-17 22:18:56 · 1582 阅读 · 0 评论 -
Linux动态库和静态库
库是预编译的目标文件(.o)的集合,它们可以被链接进程序。printf等C标准库在 /usr/lib/libc.a,它包含ANS1/ISO标准指定的函数。对每一个C程序,libc.a默认被链接。静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。编译之后程序文件大,但加载快,隔离性也好。动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程...原创 2019-09-27 15:25:24 · 203 阅读 · 0 评论 -
Ubuntu映射远程驱动器
1.sudo apt-get install cifs-utils2.sudo gedit /etc/nsswitch.conf找到hosts: files mdns4_minimal [NOTFOUND=return] dns添加winshosts: files mdns4_minimal [NOTFOUND=return] wins dns3.创建一个校验文件gedit ~/.s...原创 2019-09-04 13:18:19 · 475 阅读 · 0 评论 -
常用的线程属性
//线程属性结构体如下:typedef struct{ int detachstate; //线程的分离状态 int schedpolicy; //线程调度策略 struct sched_param schedparam; //线程的调度参数 int ...原创 2019-08-21 17:27:19 · 678 阅读 · 0 评论 -
套接字选项
一、函数#include <sys/socket.h>int getsockopt(int sockfd, int level, int optname, void *val, socklen_t *optlen);int setsockopt(int sockfd, int level, int optname, const void *val, socklen_t...原创 2019-08-21 17:24:29 · 215 阅读 · 0 评论 -
VS code 空格和tab相关设置
一、tab一律用4个空格不要检测到第一个是tab,就后面都用tab,这样会覆盖默认设置。tabSize 查找,取消 tab size/spaces automatically detected when a file is opened.二、显示空格和tabrenderControlCharacters 查找,选中勾选框,即可显示tab.renderWhitespace 查找,选择a...原创 2019-08-21 17:21:01 · 1671 阅读 · 0 评论 -
进程间通信_unp_v2
实验楼学习笔记2019/08/15.第4章 管道和FIFO4.1 概述管道是最初的UNIX IPC形式,可追溯到1973年的UNIX第三版。FIFO有时称为有名管道(named pipe).管道和FIFO都是使用read和write函数访问的。4.3 管道所有Unix都提供管道,它由pipe函数创建,提供一个单路(单向)数据流。#include <unistd.h>i...原创 2019-08-15 15:10:07 · 198 阅读 · 0 评论 -
UNIX环境高级编程
APUE 学习笔记 2019-6-12 实验楼版本 第1章 UNIX基础知识 从严格意义上说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境,通常将这种软件称为内核(kernel)。内核的接口被称为系统调用(system call),公用函数库构建在系统调用接口之上,应用程序即可使用公用函数库也可使用系统调用。当创建一个新目录时,自动创建了两个文件名:.(称为点)和.....原创 2019-08-15 14:11:30 · 506 阅读 · 0 评论 -
vim学习笔记
定义快捷键的前缀为; let mapleader=";"任何时候都要使用非递归映射:nnoremap、vnoremap.(nore非递归的意思).一、多文件与多窗口操作vim -r 1 恢复1vim 1 2:n 转到2:N 转到1:e 3 新打开3:e# 回到前一个文件:b 2 回到2;h/j/k/l或;gg 窗口间跳转二、视图操作普通模式下输入v进入选择模式shif...原创 2019-06-09 21:21:23 · 220 阅读 · 0 评论