blogernice

导航

2018年10月30日 #

字符串处理函数

摘要: 函数名: strcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例: #include <stdio.h> #include <string.h> int main(void) { char string[1 阅读全文

posted @ 2018-10-30 17:56 blogernice 阅读(131) 评论(0) 推荐(0)

ASCII码表

摘要: ASCII码表 ASCII码大致可以分作三部分組成。 第一部分是:ASCII非打印控制字符; 第二部分是:ASCII打印字符; 第三部分是:扩展ASCII打印字符。 第一部分:ASCII非打印控制字符表 ASCII表上的数字0–31分配给了控制字符,用于控制像打印机等一些外围设备。例如,12代表换页 阅读全文

posted @ 2018-10-30 17:55 blogernice 阅读(152) 评论(0) 推荐(0)

GCC编译-Werror

摘要: 编译: 第一步、是进行预编译,使用-E参数可以让GCC在预处理结束后停止编译过程: gcc -E hello.c -o hello.i 预处理的宏定义插入到hello.i中 第二步、是将hello.i编译为目标代码,这可以通过使用-c参数来完成: gcc -c hello.i -o hello.o 阅读全文

posted @ 2018-10-30 17:52 blogernice 阅读(9266) 评论(0) 推荐(0)

函数返回值—返回局部变量

摘要: 看看下面的程序的输出: #include <stdio.h> char *returnStr() { char *p="hello world!"; return p; } int main() { char *str; str=returnStr(); printf("%s\n", str); r 阅读全文

posted @ 2018-10-30 17:51 blogernice 阅读(180) 评论(0) 推荐(0)

__DATE__,__FILE__,__LINE__,__TIME__,__FUNCTION__

摘要: C99 ( ISO/IEC 9899:1999 ) 网上有pdf文件。 C标准中指定了一些预定义的宏,对于编程经常会用到。下面这个表中就是一些常常用到的预定义宏。 __DATE__ 进行预处理的日期(“Mmm dd yyyy”形式的字符串文字) __FILE__ 代表当前源代码文件名的字符串文字 _ 阅读全文

posted @ 2018-10-30 17:50 blogernice 阅读(107) 评论(0) 推荐(0)

printf中#号的意思

摘要: #进行宏字符串连接,在宏中 把参数解释为字符串,不可以在语句中直接使用。 在宏定义中 printf("%s;/n", #S) 会被解释为 printf("%s;/n", "S") 例如下面的代码 code start #define TRACE(S) (printf("%s;/n", #S), S) 阅读全文

posted @ 2018-10-30 17:49 blogernice 阅读(2133) 评论(0) 推荐(0)

printf的实现原理

摘要: printf的声明 int _cdeclprintf(const char* format, …); _cdecl是C和C++程序的缺省调用方式_CDEDL调用约定: 1.参数从右到左依次入栈 2.调用者负责清理堆栈 3.参数的数量类型不会导致编译阶段的错误对于x86而言,栈向下生长,函数参数从右向 阅读全文

posted @ 2018-10-30 17:48 blogernice 阅读(397) 评论(0) 推荐(0)

内存溢出、内存泄露、内存越界、缓冲区溢出、栈溢出

摘要: 内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足 需求,于是产生溢出。 内存泄漏是指你向系统申请分配内存进行使用(new),可是使用完了以后却不归还(delete),结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也不能再次将它分配给需要的程序。一个盘子用尽各 阅读全文

posted @ 2018-10-30 17:47 blogernice 阅读(1095) 评论(0) 推荐(0)

C语言的弱符号与强符号

摘要: c语言的强符号和弱符号是c初学者经常容易犯错的地方。而且很多时候,特别是多人配合开发的程序,它引起的问题往往非常行为怪异而且难以定位。 什么是强符号和弱符号? 在c语言中,函数和初始化的全局变量是强符号,未初始化的全局变量时弱符号。强符号和弱符号的定义是连接器用来处理多重定义符号的,它的规则是: 不 阅读全文

posted @ 2018-10-30 17:47 blogernice 阅读(446) 评论(0) 推荐(0)

大小端存储问题

摘要: 所谓的大端模式,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放; 所谓的小端模式,是指数据的低位保存在内存的低地址中,而数 据的高位保存在内存的高地址中,这 阅读全文

posted @ 2018-10-30 17:46 blogernice 阅读(610) 评论(0) 推荐(0)

gcc编译选项

摘要: gcc提供了大量的警告选项,对代码中可能存在的问题提出警 告,通常可以使用-Wall来开启以下警告: -Waddress -Warray-bounds (only with -O2) -Wc++0x-compat -Wchar-subscripts -Wimplicit-int -Wimplicit 阅读全文

posted @ 2018-10-30 17:45 blogernice 阅读(253) 评论(0) 推荐(0)

文件读写

摘要: 从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。 ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。ASCII码文件可在屏幕上按字符显示。 二进制文件是按二进制的编码方式来存放文件的。二进制文件虽然也可在屏幕上显示,但其内容无法 阅读全文

posted @ 2018-10-30 17:43 blogernice 阅读(577) 评论(0) 推荐(0)

scanf 用法及陷阱(转)

摘要: 函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。 其调用格式为: 阅读全文

posted @ 2018-10-30 17:38 blogernice 阅读(317) 评论(0) 推荐(0)

va_start、va_end、va_list的使用

摘要: 1:当无法列出传递函数的所有实参的类型和数目时,可用省略号指定参数表void foo(...);void foo(parm_list,...); 2:函数参数的传递原理函数参数是以数据结构:栈的形式存取,从右至左入栈.eg:#include <iostream>void fun(int a, ... 阅读全文

posted @ 2018-10-30 17:37 blogernice 阅读(103) 评论(0) 推荐(0)

【转】getopt分析命令行参数

摘要: (一) 在Linux中,用命令行执行可执行文件时可能会涉及到给其加入不同的参数的问题,例如: ./a.out -a1234 -b432 -c -d 程序会根据读取的参数执行相应的操作,在C语言中,这个功能一般是靠getopt()这个函数,结合switch语句来完成的,首先来看下面的代码: #incl 阅读全文

posted @ 2018-10-30 17:31 blogernice 阅读(137) 评论(0) 推荐(0)

嵌入式Linux开发层次

摘要: 大量可用的引导装载程序(bootloader)、规模缩小的分发版(distribution)、文件系统和 GUI 看起来可能太多了,但是这些丰富的选项实际上是一种恩赐,允许您调整开发或用户环境以完全符合您的需要。 许多 Linux 改良品种迎合了嵌入式/实时市场。它们包括 RTLinux(实时 Li 阅读全文

posted @ 2018-10-30 16:48 blogernice 阅读(507) 评论(0) 推荐(0)

嵌入式linux开发流程

摘要: Minicom:Linux下的终端程序,用于通过串口进行通信,在嵌入式Linux系统中,可以用于主机与目标系统通信,实现串口控制台的功能。 DHCP: 动态主机配置协议。运行实现该协议的服务的主机,通过对客户发起的DHCP请求进行应答,可以动态的配置客户机的IP地址等网络信息。 TFTP: 一种FT 阅读全文

posted @ 2018-10-30 16:47 blogernice 阅读(2213) 评论(0) 推荐(0)

mutex详解

摘要: 理发师问题: 理发店理有一位理发师、一把理发椅和n把供等候理发的顾客坐的椅子 如果没有顾客,理发师便在理发椅上睡觉 一个顾客到来时,它必须叫醒理发师 如果理发师正在理发时又有顾客来到,则如果有空椅子可坐,就坐下来等待,否则就离开。 解法: 引入3个信号量和一个控制变量: 1)控制变量waiting用 阅读全文

posted @ 2018-10-30 16:46 blogernice 阅读(2904) 评论(0) 推荐(0)

linux系统调用流程

摘要: 由于系统调用都是从调用中断开始的,所以我们还是从中断讲起. 关于中断: Intel386认识两种事件类:异常(exception)与中断(interrupt)。两者都会强制性创建一个进程或任务。中断能在任何不可预料的时间发生,来响应硬件的信号,是硬中断;而异常是由指令执行而产生的,是软中断。 386 阅读全文

posted @ 2018-10-30 16:46 blogernice 阅读(570) 评论(0) 推荐(0)

select()函数分析

摘要: Part 1:Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发 阅读全文

posted @ 2018-10-30 16:45 blogernice 阅读(339) 评论(0) 推荐(0)

Linux 硬件管理

摘要: 一、 在Linux 系统中,对硬件判别的标识的依据 在LinuxSir.Org讨论区,我们经常看到有些弟兄这样来描述自己的硬件“我的显示卡是XXX牌子的,Linux不支持怎么办?”。其实这样描述是 最差的,大家也根本没有办法提供帮助;因为Linux对硬件的识别是以为芯片组的厂商为依据的,而非硬件的品 阅读全文

posted @ 2018-10-30 16:44 blogernice 阅读(898) 评论(0) 推荐(0)

I/O空间映射

摘要: I/O空间 I/O端口和I/O内存 首先上图,如下:外设中的寄存器被称为I/O端口,外设中的内存被称为I/O内存。二者合起来统称为I/O空间。 设备驱动程序要直接访问外设或其接口卡上的物理电路,这部分通常都是以寄存器的形式出现。外设寄存器称为I/O端口,通常包括:控制寄存器、状态寄存器和数据寄存器三 阅读全文

posted @ 2018-10-30 16:42 blogernice 阅读(358) 评论(0) 推荐(0)

中断的上半部和下半部

摘要: 一、什么是下半部 中断是一个很霸道的东西,处理器一旦接收到中断,就会打断正在执行的代码,调用中断处理函数。如果在中断处理函数中没有禁止中断,该中断处理函数执行过程中仍有可能被其他中断打断。出于这样的原因,大家都希望中断处理函数执行得越快越好。 另外,中断上下文中不能阻塞,这也限制了中断上下文中能干的 阅读全文

posted @ 2018-10-30 16:40 blogernice 阅读(3959) 评论(0) 推荐(0)

udev 详解

摘要: 如果你使用Linux比较长时间了,那你就知道,在对待设备文件这块,Linux改变了几次策略。在Linux早期,设备文件仅仅是是一些带有适当 的属性 集的普通文件,它由mknod命令创建,文件存放在/dev目录下。后来,采用了devfs,一个基于内核的动态设备文件系统,他首次出现在2.3.46 内核中 阅读全文

posted @ 2018-10-30 16:38 blogernice 阅读(641) 评论(0) 推荐(0)

跟我一起写udev rules

摘要: 介绍关于本文档udev面向2.6以上的linux内核在用户空间提供动态的/dev下固定设备命名方案. 之前的/dev实现: devfs现在已被废弃,udev成为继任者. udev vsdevfs是一个敏感的谈话内容,在进行比较之前你应该读一下这个文档(http://kernel.org/pub/li 阅读全文

posted @ 2018-10-30 16:37 blogernice 阅读(670) 评论(0) 推荐(0)

信号量与自旋锁

摘要: 信号量与自旋锁 内核同步措施 为了避免并发,防止竞争。内核提供了一组同步方法来提供对共享数据的保护。 我们的重点不是介绍这些方法的详细用法,而是强调为什么使用这些方法和它们之间的差别。 Linux 使用的同步机制可以说从2.0到2.6以来不断发展完善。从最初的原子操作,到后来的信号量,从大内核锁到今 阅读全文

posted @ 2018-10-30 16:31 blogernice 阅读(142) 评论(0) 推荐(0)

深入理解ioctl

摘要: 一、 什么是ioctlioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。它的调用个数如下:int ioctl(int fd, ind cmd, …);其中fd就是用户程序打开设备时使用open函数 阅读全文

posted @ 2018-10-30 16:31 blogernice 阅读(2143) 评论(0) 推荐(0)

Linux系统调用的实现机制分析

摘要: 1 系统调用意义 Linux内核中设置了一组用于实现系统功能的子程序,称为系统调用。系统调用和普通库函数调用非常相似,只是系统调用由操作系统核心提供,运行于核心态,而普通的函数调用由函数库或用户自己提供,运行于用户态。 一般的,进程是不能访问内核的。它不能访问内核所占内存空间也不能调用内核函数。CP 阅读全文

posted @ 2018-10-30 12:00 blogernice 阅读(401) 评论(0) 推荐(0)

CPU体系架构-寄存器

摘要: CPU通用寄存器作为CPU体系架构的一部分,不可或缺。通用寄存器是CPU的算术逻辑运算操作最直接,频繁的位置。对于RISC体系的CPU,算术逻辑运算甚至只能够操作CPU通用寄存器中的数据。我们的目的不在于详尽的说明每一种CPU体系的寄存器情况,而在于将常用而且在不同CPU体系下容易混淆的寄存器做一个 阅读全文

posted @ 2018-10-30 11:43 blogernice 阅读(1694) 评论(0) 推荐(0)

CPU体系架构-寻址方式

摘要: 在这里,主要是要说明什么是寻址方式。以及每一种CPU为什么使用这样的寻址方式。在说明什么是寻址方式之前,首先需要了解指令的构成,或者说指令的编码格式。 指令编码格式 一条指令(指的是机器码)由操作码(opcode)和操作数(operand)构成。操作数可以是1个,也可以是多个,甚至可以没有。操作码则 阅读全文

posted @ 2018-10-30 11:42 blogernice 阅读(1246) 评论(0) 推荐(0)