Linux C及Shell编程
Utotao
不积跬步无以至千里
展开
-
Ubuntu安装配置YCM自动补全插件
Ubuntu安装配置YCM自动补全插件参考教程:不要看前面VIM安装中间安装YCM部分照着上面的链接来前期准备将源换成国内的方法:配置网络环境0. 安装依赖项 1. sudo apt-get install libncurses5-dev libgnome2-dev 2. sudo apt-get install libgnomeui-dev libgtk2.0-dev...原创 2018-12-18 18:08:56 · 943 阅读 · 2 评论 -
Linux GDB使用总结
参考文献:[1]《嵌入式Linux教程(上册)》[2]Linux下gdb的安装及使用入门1、GDB介绍GBD(the GNU Project Debugger)是GNU发布的一个功能强大的UNIX程序调试工具,可以调试C、C++、Pascal等多种语言程序,可以在大多数UNIX和Microsoft windows变种上运行。GDB既可以本地调试也可以远程调试。通过GDB能够对...原创 2019-06-09 17:52:56 · 646 阅读 · 0 评论 -
Linux文件I/O
待我6.19中期答辩完再来更新......参考文章:[1] 《嵌入式Linux开发教程(上册)》[2]Linux文件IO操作函数概述[3]详解linux文件IOLinux下的输入/输出(I/O),设计成“一切皆文件”,把各种各样的输出/出入(I/O)当成文件来操作,统一用文件I/O函数的形式提供给应用程序调用。1、Linux文件I/O概述Linux文件按其代表的具体...原创 2019-06-12 10:08:41 · 286 阅读 · 0 评论 -
C语言编译过程解析 && 动态(.so)\静态(.a)链接区别
最近在工作中遇到编译so文件进行硬件调试的情况,遂对so文件产生了兴趣,特用这个周末研究先so文件的前世今生,以求从根源上理解它。参考文章:[1] 《嵌入式Linux开发教程(上册)》[2]Linux静态库.a与动态库.so的生成与区别、以及.so库文件的封装与使用1、首先准备三个子程序a.c#include <stdio.h>/************...原创 2019-07-13 16:28:25 · 2347 阅读 · 1 评论 -
C语言内联函数
参考博客:[1]内联函数 —— C 中关键字 inline 用法解析这篇文章写得很好了,本博客主要针对上一篇博客的不足进行补充,同时从C语言编译过程对内联和宏定义函数进行比对,总起两者的区别和优缺点。1、内联函数的使用方法测试代码:inlineTest.c#include "inlineTest.h"#include "stdio.h"#define addDef...原创 2019-09-02 11:16:14 · 878 阅读 · 0 评论 -
C宏定义函数#define Func() do{} while(0)
之前看到过一句话,说在C语言中几乎每一个#define宏定义都是代码的一个缺陷。但是之前看到有个项目,包括在Linux Kernel里面,在代码中都有使用#define Func() do{} while(0)这种结构来定义被多次调用的而函数。参考文章:[1]#define do{}while(0)妙用这个博客将对这个结构的宏定义函数进行总结和思考。1、#define宏定义函...原创 2019-09-02 11:25:42 · 2070 阅读 · 0 评论 -
常用排序方法总结
面试常见问题,手撕快排、归并排序,或者手写一些查找算法,比如二分查找等。本片及下篇博客将分别总结常见的排序算法和查找算法,主要是基于C或者C++。这些问题本质都不难,只要勤加练习,充分理解,方能记于心中。1、冒泡排序#include "stdio.h"#include "stdlib.h"#include "stdbool.h"void bubbleSort(int ...原创 2019-09-03 16:50:10 · 296 阅读 · 0 评论 -
C语言位操作中指定的某一位数置0、置1、取反
一、指定的某一位数置1 宏 #define setbit(x,y) x|=(1&lt;&lt;y)二、指定的某一位数置0 宏 #define clrbit(x,y) x&amp;=~(1&lt;&lt;y)三、指定的某一位数取反 宏 #define reversebit(x,y) x^=(1&lt;&lt;y)三、获取的某一位的值原创 2019-02-20 22:54:03 · 3994 阅读 · 1 评论 -
对(volatile unsigned char *)分析
对于(volatile unsigned char *)0x20,它是由两部分组成:(unsigned char *)0x20,0x20只是个值,前面加(unsigned char *)表示0x20是个地址,而且这个地址类型是unsigned char ,意思是说读写这个地址时,要写进unsigned char 的值,读出也是unsigned char 。volatile,关键字v...原创 2019-02-22 12:03:01 · 2005 阅读 · 0 评论 -
内存及字符串操作memcpy、memmove、strcpy、strcmp等常用标准库函数的实现
之前对于一些标准库函数都是拿来即用,没有考虑过这个函数的优缺点及具体的实现形式,在实习期间,一个标准库函数都是被二次封装了的,还是很有趣的。比如对于malloc函数,内部的形式是void *malloc_s(int ENUM_TYPE, int size),多了一个参数ENUM_TYPE,比如对于我们TM就是MALLOC_TMBUFFER,其原因是因为这样写方便对堆区内存进行统计,防止有的小组ma...原创 2019-09-05 09:57:46 · 335 阅读 · 0 评论 -
0-1背包问题
背包问题是一种求最优解的问题,我们可以使用动态规划(DP)和回溯法来解决这类问题参考文献:[1]最通俗易懂的01背包问题讲解动态规划动态规划(Dynamic programming,DP)是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。 动态规划常常适用于有重叠子问题和最优子结构性质的问题。动态规划在查找有很多重叠子问题...原创 2019-09-09 08:56:43 · 337 阅读 · 0 评论 -
Linux Shell脚本编程
继续...感觉之前博客每篇内容太长了,以后为了便于阅读,把每一篇博客拆分一下。3、脚本编程3.1 命令、函数与脚本返回值脚本也是一个程序,而每一个程序本本身都是一个真值表达式,它的真值是由其返回值决定的,故shell脚本应该返回一个值,若脚本未显示指定返回值,则自动使用最后一条命令的返回值;如果需要显示指定脚本的返回值,则需要用exit命令实现。#!/bin/shecho ...原创 2019-06-07 11:51:31 · 280 阅读 · 0 评论 -
Linux网络编程
今天是6.2号,到6.14号需要提交《中期检查报告》、《学术报告》,现在论文需要大修,至少6.15中期答辩后再次提交,怎么也要在赶在6.24号入职之前定稿投出去。先修改小论文、修改《中期检查报告》,再写《学术报告》,最后制作PPT,一件一件事情搞吧......痛苦啊......抽着时间把这篇论文补一下吧...几个名词的说明:协议:通常指某一个协议,一般由某一个或者一组文件如rfc/...原创 2019-06-01 23:01:36 · 680 阅读 · 0 评论 -
Linux Shell编程初步
参考文献:[1] 《嵌入式Linux开发教程(上册)》[2]Shell 教程1、基础概念shell程序一般被称为脚本(script),他其实就是一组命令的集合,最简单的甚至可以简单的堆砌命令。这种脚本最明显的好处是重复一系列固定命令时减少敲击键盘的次数。脚本shell与C源码的区别:C需要将.c和.h文件通过编译工具处理成为二进制可执行文件才可以执行并看到结果 shel...原创 2019-06-06 22:13:06 · 1517 阅读 · 1 评论 -
VIM一般命令总结
ngg:光标移动至第n行的行首(n为数字)G:光标移动到行末======================================0(数字0):光标移动到当前行的行首$:光标移动至当期行的行尾fx:搜索当期行下一个出现字母x的地方,不可以向前搜索=================================================================H键...原创 2019-02-18 19:57:30 · 267 阅读 · 0 评论 -
linux终端常用命令(进阶)
**linux内核网站: www.kernel.org**==========================================================find目的:查找符合条件的文件1)在那些目录中查找2)查找的内容格式:find 路径 选项 查找条件例如:find 路径 -name ".txt"1) 路径指明查找的路径2) -name 表明以...原创 2019-02-19 10:25:22 · 291 阅读 · 0 评论 -
Linux进程
参考资料:[1] 《嵌入式Linux开发教程(上)周立功主编》[2]进程详解1. 进程环境多进程举例:比如同时运行QQ、微信、截图工具、视频播放器等多进程优点:每个进程互相独立,子进程崩溃不影响主程序的稳定性 通过增加CPU,就可以容易扩充性能 进程能直接获取系统的资源,总体能够达到的性能上限非常大1.1 程序与进程程序(program):是一个普通的文件,为...原创 2019-05-20 16:23:25 · 489 阅读 · 0 评论 -
Linux进程间通信
待我慢慢总结..........参考文章:[1]进程间的五种通信方式介绍[2] 《嵌入式Linux开发教程(上册)》进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、共享存储、消息队列、信号量、Socket、Streams等。其中 Socket和Streams支持不同主...原创 2019-05-20 20:18:27 · 263 阅读 · 0 评论 -
Linux多线程
待我慢慢总结...又是一个周末呀,明天又要开始码论文了,真是毫无意义......,这群老师真是浪费国家科研经费....参考文章:[1]线程与进程,多线程,多进程,线程并发,线程并行[2] 《嵌入式Linux开发教程(上册)》1、多线程概述线程(thread)是包含在进程内部的顺序执行,是进程中的实际运作单位,也就是系统能够调度的最小单位。一个进程中可以并发多条线程,...原创 2019-05-26 20:29:01 · 502 阅读 · 0 评论 -
C之动态内存分配
在编写程序时,通常并不知道需要处理的数据量,或者难以评估所需处理数据量的变动程度。在这种情况下,要达到有效的资源利用,必须在运行时动态地分配所需内存,并在使用完毕后尽早释放不需要的内存,这就是动态内存管理原理。动态内存管理同时还具有一个优点:当程序在具有更多内存的系统上需要处理更多数据时,不需要重写程序。参考文章:[1]C语言动态内存管理和动态内存分配1、动态内存管理标准库...原创 2019-04-29 10:43:28 · 281 阅读 · 0 评论 -
字符串
在 C 语言中,字符串实际上是使用 null 字符 ‘\0’ 终止的一维字符数组。EX:char greeting[6] = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\0’};1、fgets()的使用//// main.c// C_Practice//// Created by ztaotao on 2017/9/4.// Copyright © 2017年 utot原创 2017-09-04 12:36:24 · 238 阅读 · 0 评论 -
关于C语言
C语言的历史: C 语言是一种通用的、面向过程式的计算机程序设计语言。1972 年,为了移植与开发 UNIX 操作系统,丹尼斯·里奇在贝尔电话实验室设计开发了 C 语言。最初是由丹尼斯·里奇在贝尔实验室为开发 UNIX 操作系统而设计的。C 语言最开始是于 1972 年在 DEC PDP-11 计算机上被首次实现。 在 1978 年,布莱恩·柯林汉(Brian Kernighan原创 2017-09-04 06:42:05 · 567 阅读 · 0 评论 -
二维数组、字符串、循环的处理
小游戏:#include <stdio.h>#include <stdlib.h>#include <string.h>//支持字符串操作#include <unistd.h>#define MAX 6//系统要求的最大贵妃数int main(){ int ii;//终止while(1) int i;//定义循环变量 int chose; int temp原创 2017-06-16 20:22:36 · 1391 阅读 · 0 评论 -
一维数组数据的处理(排序,删除,插入)
注意点 一:排序后数组转移储存,以便后续操作,比如插入处理 二:熟练掌握数组的录入,排序处理 三:掌握障眼法删减数组元素//// main.c// 123//// Created by utotao on 2017/6/15.// Copyright © 2017年 乙一. All rights reserved.//#include <stdio原创 2017-06-15 19:16:42 · 4129 阅读 · 0 评论 -
有符号数和无符号数混用的思考
参考文章:[1]C语言中无符号数和有符号数之间的运算[2]负数在计算机中怎样存储[3]二进制减法1、负数如何在计算机中存储?原码:10进制转换成2进制是原码,只不过正数的原码是本身符号位为0,负数的原码符号位为1(以下篇幅均以单字节为例:10进制1的原码是0000 0001,10进制-1的原码是1000 0001)。反码: 正数的反码是本身,负数的反码是负数的原码0变...原创 2019-09-25 11:02:51 · 1068 阅读 · 0 评论