linux c
一一风浪
这个作者很懒,什么都没留下…
展开
-
Linux C 堆与栈的区别
一、预备知识——程序的内存分配一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。3、全局区(静态区)(static)转载 2017-07-11 10:49:28 · 248 阅读 · 0 评论 -
makefile编译时候出现:commands commence before first target
在C/C++语言中, 可以用\来换行, 此时要注意, 在一行的最后面加上\, 而这个\后面不能再有任何字符, 哪怕是空格, 也不允许, 否则出错。1. 上一行换行符号 \ 后面有空格2. 本行前面的空白有非法字符...转载 2018-02-24 17:01:43 · 1425 阅读 · 0 评论 -
Linux库的基本概念
一、基本概念1.1、什么是库在 windows 平台和 linux 平台下都大量存在着库。本质上来说库是 一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于 windows 和 linux 的平台不同(主要是编译器、汇编器和连接器 的不同),因此二者库的二进制是不兼容的。本文仅限于介绍 linux 下的库。 1.2、 库的种类linux 下的库有两种:静态库和共享库(动态库)。二者的不同...转载 2018-03-28 11:40:21 · 1027 阅读 · 0 评论 -
Linux下静态库.a与.so库文件的生成与使用
编辑四个文件:A1.c A2.c A.h test.cA1.c:#include <stdio.h>void print1(int arg){printf("A1 print arg:%d\n",arg);}A2.c:#include <stdio.h>void print2(char *arg){printf("A2 printf arg:%s\n", arg);}A...转载 2018-03-28 13:27:07 · 11194 阅读 · 0 评论 -
linux获取系统信息(sysinfo函数的使用)
sysinfo结构体Linux中,可以用sysinfo来获取系统相关信息。Linux中,sysinfo是用来获取系统相关信息的结构体。函数声明和原型:#include <sys/sysinfo.h>int sysinfo(struct sysinfo *info);结构体信息:在Linux 2.3.16中,结构体的信息是(单位是字节):[cpp] view plain copystru...转载 2018-05-11 10:06:47 · 615 阅读 · 0 评论 -
指针与二维数组详解
二维数组在概念上是二维的,有行和列,但在内存中所有的数组元素都是连续排列的,它们之间没有“缝隙”。以下面的二维数组 a 为例:int a[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };从概念上理解,a 的分布像一个矩阵:0 1 2 3 4 5 6 7 8 9 10 11但在内存中,a 的分布是一维线性的...转载 2018-05-18 09:54:18 · 449 阅读 · 0 评论 -
指针和二维数组的使用讲解
在C++中,二维数组元素值在内存中是按行的顺序存放的,即先存二维数组的第一行数据,然后再存储第二行数据,一次类推,可以把它看成是一个特殊的一维数组。因此,与一维数组类似,可用指针变量来访问二维数组。我们可以像使用一维数组一样,对二维数组进行操作。但是那样非常麻烦,所以C++提供了关于二维数组的单独操作方法。首先搞清楚三个概念:1.二维数组行首地址二维数组各元素按行排列可写成矩阵形式,若将第i行中的...原创 2018-05-18 10:03:55 · 748 阅读 · 0 评论 -
linux文件操作函数(open、write、read、close)
1. open()函数功能描述:用于打开或创建文件,在打开或创建文件时可以指定文件的属性及用户的权限等各种参数。所需头文件:#include <sys/types.h>,#include <sys/stat.h>,#include <fcntl.h>函数原型:int open(const char *pathname,int flags,int perms)参数...转载 2018-06-12 09:48:28 · 11324 阅读 · 0 评论 -
指针函数与函数指针的区别
首先它们之间的定义: 1、指针函数是指带指针的函数,即本质是一个函数,函数返回类型是某一类型的指针。类型标识符 *函数名(参数表)int *f(x,y);首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。表示:float *fun();float *p;p =...转载 2018-06-19 11:13:43 · 126 阅读 · 0 评论 -
gcc编译
gcc命令使用GNU推出的基于C/C++的编译器,是开放源代码领域应用最广泛的编译器,具有功能强大,编译代码支持性能优化等特点。现在很多程序员都应用GCC,怎样才能更好的应用GCC。目前,GCC可以用来编译C/C++、FORTRAN、JAVA、OBJC、ADA等语言的程序,可根据需要选择安装支持的语言。语法gcc(选项)(参数)选项-o:指定生成的输出文件;-E:仅执行编译预处理;-S:将C代...转载 2018-06-19 13:52:35 · 164 阅读 · 0 评论 -
Linux C 字符串函数 sprintf()、snprintf() 详解
一、sprintf() 函数详解在将各种类 型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于 sprintf 跟 printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致 sprintf 比 printf 有用得多。所以本文着重介绍 sprintf,有时也穿插着用用 pritnf。sprintf是个变参函数,定义如下:i...转载 2018-06-20 10:18:22 · 2054 阅读 · 0 评论 -
Linux C 字符串函数 sprintf()、snprintf() 详解
一、sprintf() 函数详解在将各种类 型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于 sprintf 跟 printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致 sprintf 比 printf 有用得多。所以本文着重介绍 sprintf,有时也穿插着用用 pritnf。sprintf是个变参函数,定义如下:i...转载 2018-06-20 10:20:42 · 426 阅读 · 0 评论 -
嵌套的命名空间和匿名的命名空间
1. 嵌套的命名空间命名空间可以嵌套,嵌套的命名空间可以进一步改进库中代码的组织。namespace cplusplus_primer { namespace QueryLib {class Query { /* … */ };// … } namespace Bookstore {class Item_base { /* … */ };// … }}...转载 2018-07-26 11:55:18 · 1202 阅读 · 0 评论 -
c++的继承详解
一、前言 继承是c++语言一个重要的机制,该机制自动地为一个类提供来自另一个类的操作和数据结构,这使得程序员只需在新类中定义已有的类中没有的成分来建立一个新类。二、继承解释 继承是类的重要特性。A类继承B类,我称B类为“基类”,A为“子类”。A类继承了B类之后,A类就具有了B类的部分成员,具体得到了那些成员,这得由两个方面决定: - 继承方式 - 基类成员的访问权限 三、三种继承方式...转载 2018-07-26 14:51:48 · 399 阅读 · 0 评论 -
linux设备驱动程序中的阻塞机制
阻塞与非阻塞是设备访问的两种方式。在写阻塞与非阻塞的驱动程序时,经常用到等待队列。一、阻塞与非阻塞 阻塞调用是指调用结果返回之前,当前线程会被挂起,函数只有在得到结果之后才会返回。 非阻塞指不能立刻得到结果之前,该函数不会阻塞当前进程,而会立刻返回。 对象是否处于阻塞模式和函数是不是阻塞调用有很强的相关性,但并不是一一对应的。阻塞对象上可以有非阻塞的调用方式,我们可以通过一定的AP...转载 2018-07-27 11:46:56 · 347 阅读 · 0 评论 -
c和C++学习路线
C/C++工程师必备知识的思维导图。初学者看到这么密集的知识点,是不是有点眼晕呢?的确,C/C++是一门知识面覆盖很广的学科。想学好C/C++的你并不需要慌张,内容虽多,但依然有法可依。只要有足够的耐心和毅力,加上正确的学习方法,就不怕你学不好C/C++。 一、初级入门阶段在入门之初,首先要做的是通过C/C++语言的学习培养编程思维和动手能力,深刻理解面向过程和面向对象的思想方...原创 2019-01-02 16:12:48 · 627 阅读 · 0 评论 -
C语言itoa()函数和atoi()函数详解(整数转字符C实现)
C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串。1.int/float to string/array:C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明。● itoa():将整型值转换为字符串。● ltoa():将长整型值转换为字符串。● ultoa():将无符号长整型值转换为字符串。●转载 2018-01-18 16:21:49 · 269 阅读 · 0 评论 -
time(), time_t, localtime(), localtime_r()的理解和用法
time_t的定义:[objc] view plain copytypedef __darwin_time_t time_t; [objc] view plain copytypedef long __darwin_time_t; /* time() */转载 2018-01-26 13:43:47 · 1174 阅读 · 0 评论 -
gets和fgets函数的区别
1. gets与fgets gets函数原型:char*gets(char*buffer);//读取字符到数组:gets(str);str为数组名。 gets函数功能:从键盘上输入字符,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。 读取的换行符被转换为null值,做为字符数组的最后一个字符,来结束字符串。转载 2018-01-24 15:01:26 · 642 阅读 · 0 评论 -
Linux与堆栈概念
在学习C/C++编程的时候,老师都会反复灌输一些概念。比如程序内变量在堆栈上的分配,栈是由高地址到低地址,堆是由低地址到高地址等等,然后画出这样一幅经典概念图:图片来自:http://blog.csdn.net/wind19/article/details/5964137这个概念图容易让读者误认为这一大段的程序在具体分配到的物理内存上面是连续的。换句话说,整个程序在加载到内转载 2017-07-11 10:53:57 · 390 阅读 · 0 评论 -
Linux下栈溢出
1. 概述 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等;和堆相比,栈通常很小,在Linux下,通过ulimit -s可以查看栈的大小。 所谓栈溢出,是缓冲区溢出的一种,本质上是写入栈的数据超过栈的大小,使得数据写入其他单元,往往造成不可预期的后果,最常见的就是程序崩溃。2. 实例一个栈溢出的程转载 2017-07-11 11:05:46 · 1263 阅读 · 0 评论 -
深入理解C语言的函数调用过程
本文主要从进程栈空间的层面复习一下C语言中函数调用的具体过程,以加深对一些基础知识的理解。 先看一个最简单的程序:点击(此处)折叠或打开/*test.c*/#include stdio.h>int foo1(int m,int n,int p){ int x = m + n + p; return x转载 2017-07-04 16:18:21 · 2977 阅读 · 0 评论 -
对于linux下system()函数的深度理解
这几天调程序(嵌入式linux),发现程序有时就莫名其妙的死掉,每次都定位在程序中不同的system()函数,直接在shell下输入system()函数中调用的命令也都一切正常.就没理这个bug,以为是其他的代码影响到这个,或是内核驱动文件系统什么的异常导致,昨天有出现了这个问题,就随手百了一下度,问题出现了,很多人都说system()函数要慎用要少用要能不用则不用,system()函数不稳定?转载 2017-07-23 18:42:48 · 386 阅读 · 0 评论 -
Linux 下的dd命令使用详解(摘录)
一、dd命令的解释dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512;c=1;k=1024;w=2参数注释:1. if=文件名:输入文件名,缺省为标准输入。即指定源文件。2. of=文件名:输出文件名,缺省为标准输出。即指定目的文件。3. ibs=转载 2017-07-23 18:45:06 · 354 阅读 · 0 评论 -
switch引发的错误 a label can only be part of a statement and a declaration is not a statement
用switch的时候发现一个错误a label can only be part of a statement and a declaration is not a statement 仔细观察以后发现是没有正确的加大括号引起的。switch(a){ swtch(a){case 1: case 1:...........原创 2017-07-24 09:55:10 · 4703 阅读 · 0 评论 -
C语言函数传递指针参数的问题
一个问题是,我们想用一个函数来对函数外的变量v进行操作,比如,我想在函数里稍微改变一下这个变量v的值,我们应该怎么做呢?又或者一个常见的例子,我想利用swap()函数交换两个变量a,b的值,我们应该怎么做呢(好吧,博主是觉得这个问题十分经典)。如果你真的理解【函数】这个工具的本质,我想你稍微仔细的思考一下,可能就不会来查看博主的这篇文章,对函数来说,它所传递的任何参数仅仅是原来参数的一个拷转载 2017-12-20 13:18:51 · 335 阅读 · 0 评论 -
让你不再害怕指针——C指针详解(经典,非常详细)
前言:复杂类型说明 要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根据运算符优先级结合,一步一步分析.下面让我们先从简单的类型开始慢慢分析吧:[cpp] view plain转载 2017-12-20 13:44:16 · 404 阅读 · 0 评论 -
递归函数详解
递归函数是一个直接或间接调用函数自身的嵌套型函数。每一个递归函数都有递推(递的概念)和回推(归的概念)的过程。递推过程是将一个复杂的大问题一步步分解成简单的过程类似的小问题,而回推过程是在递归历史的基础上,从最后的最简单的小问题开始,结合该层上一层的输入参数与输出结果,按逻辑一步步向上恢复成最初的复杂的大问题。下面用一个阶乘的例子说明。 递推过程: (1) 执行A即初始化resul原创 2017-12-15 13:48:39 · 19661 阅读 · 0 评论 -
c语言中关于字符串的那些事儿(字符数组和字符指针)
在说字符串常量之前,先要区分一下地址常量与地址变量的区别:数据存储的空间中的数据可以被修改,这个空间称为变量,如果空间中的数据不能被修改,这个空间称为常量。地址常量就是地址不能被修改,就像一维数组中的数组名,是一个指针常量,不可被运算和不可被改变。地址变量就是地址能修改,就像一级指针,是一个指针变量,可以通过移动下标或移动指针来改变。 在C中定义字符串有下列几种形式:字符串常量,char数原创 2018-01-12 10:12:05 · 373 阅读 · 0 评论 -
c中给字符数组,字符串指针赋值的方法总结
在写程序的时候,总是搞混,现在总结一下以免以后再犯 char a[10];怎么给这个数组赋值呢?谭浩强的书上明确指出,字符数组可以在定义时整体赋值,不能再赋值语句中整体赋值。1、定义的时候直接用字符串赋值char a[10]="hello";注意:不能先定义再给它赋值,如char a[10]; a[10]="hello";这样是错误的!2、对数组中字符逐个赋值char转载 2018-01-12 10:22:48 · 33361 阅读 · 8 评论 -
localtime 和 localtime_r
上程序:[c-sharp] view plaincopy#include #include #include #include using namespace std; int main(int argc,char *argv[]) { time_t tNow =time(NULL);转载 2018-01-31 10:53:45 · 659 阅读 · 0 评论 -
双向链表的插入及删除图解
双向链表的插入第一步:首先找到插入位置,节点 s 将插入到节点 p 之前 第二步:将节点 s 的前驱指向节点 p 的前驱,即 s->prior = p->prior; 第三步:将节点 p 的前驱的后继指向节点 s 即 p->prior->next = s; 第四步:将节点 s 的后继指向节点 p 即 s->next = p; 第五步:将节点 p 的前驱指向节点 s转载 2018-01-31 14:20:43 · 12137 阅读 · 5 评论 -
C语言实现链表的操作
1.什么是链表链表我的理解要包含以下特征:(1).由n个节点离散分配;(2).每个节点通过指针连接(3)每一个节点由一个前驱节点和一个后驱节点(4).首节点没有前驱节点,尾节点没有后驱节点;满足上面的4条,我们就称为链表;链表既然由很多个节点,那节点又由什么组成?节点由两个部分组成,一是数据域,用来存放有效数据;二是指针域,用来指向下一个节点;下面用C语言来构建链表数据结构...转载 2019-06-13 10:56:24 · 204 阅读 · 0 评论