- 博客(31)
- 资源 (1)
- 收藏
- 关注
原创 第一章 unix基础知识
1.1引言所有操作系统都为它所运行的程序提供服务,典型的服务包括执行新程序,代开文件,读文件,分配存储区等1.2unix体系结构操作系统可以视为一种软件,它控制计算机的硬件资源,提供程序运行环境,此即为内核内核的接口称为系统调用,公用函数建立在系统接口之上,应用程序既可以使用公用库函数又可以使用系统调用。其实shell是一种特殊的应用程序,为运行其他程序提供了一个接口。 当然更广泛
2017-11-03 10:38:12
1335
原创 K&R之const用法
const用法:const 用于修饰变量,限定该变量的值不能被修改,对于数组而言,const限定符指定的数组所有元素的值都不能改变。const double 2 = 2.71828const char msg[] = "hello";const 限定符也可以配合数组参数使用,他表明函数不能修改数组元素的值int strlen(const char[]);const的例子:
2017-08-17 10:59:27
340
原创 关于指针的定义
指针的定义:1.定义一个整型变量:int a;2.定义一个整型指针:int *a;3.定义一个指向整型变量指针的指针:int * *a;*的运算是自右向左进行的,可以将其看为int *(*a),可以将其分成两部分来看,第一部分是int *是一个指向整形的指针,第二部分是(*a)是一个指针变量,也就是说(*a)是一个指向整型的指针,那么a则是指向指针的指针4.
2017-08-16 20:48:16
3067
原创 K&R之宏替换的例子
宏替换的例子:#include #define MAX(A,B) ((A) > (B) ? (A):(B))void max(int a,int b){int c;return c = max(a,b);}int main(){int a=2;int b =8;int c1,c2;c1 = MAX(a++,b++);c2 = max(a++,b+
2017-08-16 17:19:05
300
原创 K&R之指针
指针:机器的一个字节可以存放一个char 类型两个字节存放一个short类型四个字节可以存放一个long类型指针只能指向特定类型的对象,就是说每个指针都必须指向某种类型的数据void类型指针可以指向任何类型的指针*pi += 1;等同于++*pi或(*pi)++;(注意,这里必须带括号,*和++这样的一元运算符遵循从右到左的顺序结合)指针与函数参数
2017-08-15 17:47:59
294
原创 K&R之初始化&宏调用
初始化在不进行显示初始化的情况下,外部变量和静态变量都将被初始化为0,自动变量和寄存器变量的初始值为无用信息对于外部变量的静态变量其初始化表达式必须是常量表达式对于自动变和寄存器变量来说初始化表达式可以不是常量表达式,表达式中可以包含任意在此表达式之前已经定义的值,包括函数调用宏调用:宏替换对在括号中的字符串不起作用如 #define YES 123宏替换对引号中的
2017-08-15 13:29:49
310
原创 K&R寄存器变量
寄存器变量:register声明告诉编译器它所声明的变量放在寄存器中,用于使用频率高的变量,可以使程序更小,执行速度更快如:register int x;register char c;过量的寄存器变量不好无论寄存器变量是存放在寄存器中还是存放在内存中,其地址不能访问寄存器变量的初始化默认为0
2017-08-15 11:16:00
272
原创 K&R 之静态变量static
static静态变量只供其所在的源文件使用,其他函数不能使用在某一个函数中声明static变量则只在该函数中有用static修饰的变量,函数即使于自动变量,函数名字相同也不会产生冲突
2017-08-15 11:07:38
206
原创 K&R 之extern
extern:extern用于访问外部变量例子:在config.h中int p = 10;char x[10] = "hello" ;在test1.c中#include "config.h"#include int main(){extern p;p++;extern x[];printf("%d,%s",p,x);return 0;
2017-08-15 11:00:22
206
原创 K&R 第二章 类型,运算符 与表达式
类型,运算符,表达式变量名:变量名:由字母和数字组成,——下划线被看作字母,一般下划线用于库例程的开头,所以在自己的程序里面不要用下划线开头。局部变量使用较短的名字,外部变量使用较长的名字数据类型以及长度char intfloatdouble此外还可以加一些限定符 short longshort 至少16位 long至少32位 short不能长于int,
2017-08-14 19:13:00
282
原创 K&R 导论
第一章数值运算:如果某个算数运算符的所有操作都是整型,则执行整型运算。2如果其中一个是浮点型,则在运算前将整型转换成浮点型,然后运算。一般如果定义了一个float 变量,该整型变量是整数,也要写上小数点,便于阅读。打印时字符格式:int a;printf("%3d",a);这样输出的a就占3个字符宽度,一般用于输出时对齐。float a;printf("%3
2017-08-14 11:35:05
465
原创 typedef
typedef 用来创建一个新的数据类型tyoedef int Length;将Length定义为与int具有同等意义的名字。类型Length可以用于类型声明,类型转换如:Length len,,axlen;Length ×lengths[];typedef char *string;定义了一个字符型指针类型string,然后可以用string 定义其他变量。typed
2017-08-13 13:47:41
315
原创 文件I/O
概述:本次讨论的文件IO是无缓冲的IO文件的操作对应的函数有open write lseek read 文件描述符:文件描述符随着文件被创建或打开而产生,又由内核返回给进程,可以作为参数传递给读和写函数文件描述符0对应着标准输入 通常替换 STDIN_FILENO文件描述符1对应着标准输出 通常替换 STDOUT_FILENO文件描述符3对应着标准错误 通常
2017-07-31 11:03:00
200
原创 unix基础知识
unix体系结构内核:控制计算机的硬件资源,提供程序运行的环境Linux是GNU操作系统的内核操作系统:从光以上来讲,操作系统包括内核以及一些其他软件,这些软件能够使操作系统发挥重要作用,使计算机有自己的独特性内核与外界的接口称为系统调用,公用库函数建立在系统调用之上,应用程序既可以使用系统调用,也可以使用公共库函数。POSIX:POSIX表示可移植
2017-07-30 22:23:18
255
原创 linux网络编程
TCP/IP协议Web客户与服务器之间通过TCP(transmission control protocol)通信.TCP又转而使用IP(internet protocol)通信,IP再通过某种形式的数据链路层通信,如果客户与服务器处于同一个以太网,右下图所示通信层次。客户与服务器之间的信息流在一端是向下通过协议栈的,跨越网络后,在另一端是向上通过协议栈的。当用户和服务器属于不
2017-07-29 14:00:41
195
原创 linux编程中的时间
在linux中的时间有time_t和struct tmtime_t的定义为type long time_ttime_t描述的时间是从1970年1月1日0时0分0秒到获取时间的那一秒的秒数。函数time(NULL)可以获取当前的时间并以time_t的类型返回。time_t 获取到的时间不够直观,为了直观地描述时间,采用了tm结构体的形式,tm结构体的内容为
2017-07-24 09:18:22
235
转载 文件系统至st_mode字段
http://blog.youkuaiyun.com/q1007729991/article/details/53377074
2017-07-24 08:54:56
527
原创 linux编程之stat函数
stat函数用来获取文件的信息,如文件大小,修改时间等stat函数的返回值是一个结构体其名字为struct statstruct stat { dev_t st_dev;/* 包含这个文件的设备 ID */ ino_t st_ino;/* inode 编号 */ mode_t st_mode;/* 访问权限 */ nlink_t st_n
2017-07-24 08:49:58
709
原创 linux编程之文件系统
linux中的文件系统有EXT2block:ext2文件系统组织文件时是以block为单位组织的,磁盘上一般是以扇区为单位的,一个扇区大小为512B,block是磁盘上的一块区域,大小一般为8个扇区,为4K.inode表:inode表就是一块区域记录着文件信息inode结点的表格inode节点: 图1 ext2全貌 从图1
2017-07-24 08:21:04
293
原创 动态库与静态库
静态库生成方法先把文件编译成.o文件如gcc -c add.c -o add.o然后在利用ar命令生成.a的库如 ar -r libbase.a add.o查看静态库中的内容 ar -t libbaase.a使用静态库:如add.c的内容为#includeint add(int a,int b){return (a+b);}在使用静态库时如下
2017-07-23 13:02:57
198
原创 烧写系统
1.烧写u-boot这里采用openjtag来烧写将openjatg和开发板连接起来,把要烧写的东西复制到和oflash.exe一个目录下。将连接了开发板的openjtag和电脑连接起来,在设备管理器下发现opengtag的用不了,这时更新驱动,找到opengtag的驱动,发现安装不了,这时重启电脑禁用签名,电脑启动后在重新安装一次就好了。进入dos状态,执行命令oflash
2017-07-15 13:15:03
895
转载 w_char_t
转自http://blog.youkuaiyun.com/dongyonghui_1017/archive/2009/06/18/4280205.aspx有的人爱用strcpy等标准ANSI函数,有的人爱用_tXXXX函数,有必要把来龙去脉搞清楚。 为了搞清这些函数,就必须理请几种字符类型的写法。char就不用说了,先说一些wchar_t。wchar_t是Unicode字符的数据类型,它实际定义在
2017-07-14 18:22:31
861
转载 编码方式
转载出处:http://blog.youkuaiyun.com/polarman/archive/2007/04/30/1593159.aspx 如果你开发过的软件项目中涉及到多语言支持的问题,那么相信你没少碰到过乱码问题,然后在寻求解决问题的途径过程中被一些概念如ASCII, ISO-8859-1, Unicode,UTF-8,GBK,GB2312等等所困扰。本文有助于你正确的理解这些概念。
2017-07-14 18:07:11
259
转载 可变参数
内核中printf函数printf(const char *fmt, ...){va_list args;int n;va_start(args, fmt);/*args为最后一个固定参数的地址加上其大小,即为第一个可变参数的地址*/n = vsprintf(sprint_buf, fmt, args);va_end(args);if (console_
2017-07-13 20:46:06
290
原创 lcd驱动架构
lcd的硬件特性以及使用方法比较简单,再次就不罗嗦了,主要写一下驱动架构方面两个关键文件fbmem.c 和s3c2410fb.cfbmem.c中是LINUX的缓冲帧函数,缓冲帧就是一块内存,是显示缓冲区的一种抽象,往该内存中写入颜色的数据就会在lcd上显示。应用程序操作lcd时通过fbmem.c中的file_operationsstatic const struct file_op
2017-07-08 10:10:36
355
转载 内核中的操作函数前面的点
linux内核结构体的使用指定初始化(点运算符)这种方式称为指定初始化(designated initializer)。如,/usr/src/linux-2.6.32.5/drivers/usb/usb-skeleton.cstatic struct usb_driver usb_storage_driver = { .owner = THIS_MODULE, .name =
2017-07-08 09:08:11
225
原创 arm-linux-objdump
arm-Linux-objdump命令用于显示二进制文件的信息,也可以用来查看反汇编代码,使用格式如下: arm-linux-objdump -D -m arm key_led_elf > key_led.dis将elf文件转换为反汇编文件—dissassemble-all或者-D 反汇编所有段 —architecture=machine或者-m machine 指定反汇
2017-07-05 16:45:22
1045
原创 arm-linux-objcopy
arm-Linux-objcopy被用来复制一个目标文件的内容到另一个文件中.此选项可以进行格式的转换.在实际编程的,用的最多的就是将ELF格式的可执行文件转换为二进制文件.Arm-linux-objcopy –o binary –S elf_file bin_file-O bfdname输出的格式-S不从源文件中复制重定位信息和符号
2017-07-05 16:35:02
366
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人