
Linux C
文章平均质量分 75
leesphone
交流促进进步
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
谈一谈如何处理文件系统损坏的问题
在嵌入式的设备上,一个无法避免的问题是,如果设备突然掉电,可能会引起一系列的连锁反应(这也是PC不建议直接扣电池的原因),其中有一项就是,突然掉电可能会引起文件系统损坏,这可是要命的!一般来说,如果只是文件损坏,那也没啥,最多坏一个或者几个文件,但要是文件系统损坏,那可能意味着所有数据的丢失,当然,如果你舍得花钱,还是可以找回来的。这里谈的case就是,比如你家装的网络摄像头突然断电...原创 2020-12-24 11:11:25 · 2134 阅读 · 0 评论 -
a[i][j] 和 a[j][i] 的区别
先来一段代码:#define MAX_LEN? 10000int func(){ int i = 0, j = 0; int a[MAX_LEN?][MAX_LEN?]; for (i=0; i<MAX_LEN; i++) { for (j=0; i<MAX_LEN; j++) { a[il[j] = 1;// a[j][i] = 1? } } ... return 0;}一般情况下我们都会习惯性的用a[i][j], 如果把a[i][j]换成a[j原创 2020-07-06 09:40:25 · 1970 阅读 · 0 评论 -
别再说你不懂Linux内存管理了,10张图给你安排的明明白白!
好文章转载一下,共享之。今天来带大家研究一下Linux内存管理。本文讨论技术内容前提,操作系统环境都是x86架构的 32 位Linux系统。虚拟地址即使是现代操作系统中,内存依然是计算机中很宝贵的资源,看看你电脑几个T固态硬盘,再看看内存大小就知道了。为了充分利用和管理系统内存资源,Linux采用虚拟内存管理技术,利用虚拟内存技术让每个进程都有4GB互不干涉的虚拟地址空间。进程初始化分配和操作的都是基于这个「虚拟地址」,只有当进程需要实际访问内存资源的时候才会建立虚拟地址和物理...转载 2020-05-28 16:47:21 · 249 阅读 · 0 评论 -
C函数之pthread_create()使用
用pthread_create方法创建的线程,默认是非detached的,也就是说当线程退出时它所占用的系统资源并没有完全真正的释放,也没有真正终止,就会出现内存泄漏有个案子,按下button的时候我们就启动线程来播放一段声音,如果不停的按门铃发现一段时间之后就无法播放声音了,查下来发现创建线程失败error是cannot allocate memory。以下提出有3种方法可以避免这...原创 2020-04-10 20:02:06 · 2055 阅读 · 0 评论 -
C函数之localtime_r()
问题描述:localtime_r()函数在一个进程生命周期中,当系统time zone改变时,localtime_r()返回的时间与系统实际时间有误差造成这个现象的原因:localtime_r不会使用系统time zone设定全局变量 tzname, timezone 和daylight的值,这三个变量被用来校正格林威治(UTC) 时间为本地时间。当系统time zone在进程周...原创 2020-04-10 19:58:52 · 9312 阅读 · 0 评论 -
C函数之create and close
creat()函数在调用成功后返回一个文件描述符,很多人都忽略了release这个文件描述符,造成memory leak.常见的代码比如:If (create("/tmp/flag.file", 0666) < 0){printf("something wrong!\n");}或者干脆:create("/tmp/flag.file", 0666);cre...原创 2020-04-10 19:57:04 · 232 阅读 · 0 评论 -
C语言开发之中断处理遇上system
近期在debug一下signal丢失的问题发现在中断处理函数中调用system()启动进程会造成启动的进程收不到某些signal的现象,原因是:1 根据LINUX的信号 处理机制,我们知道为妨止在处理信号的过程中又来重复信号造成信号丢失,会采取屏蔽正在处理的信号标志位,以让重复信号排队;在处理完上一个信号后,再打 开标志位,接着处理重复信号。所以在中断处理函数里面,当前正在处理的信号(假设为X...原创 2020-04-10 19:52:04 · 213 阅读 · 0 评论 -
交叉编译
在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓平台,实际上包含两个概念:体系结构(Architecture)、操作系统(Operating System)。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行原创 2010-05-10 20:59:00 · 2013 阅读 · 0 评论 -
sprintf and snprintf的陷阱
sprintf和snprintf这两个函数的原型估计大家都很熟练了,这里要说的是这两个函数在使用时可能会出现的一个问题。 首先来看一段代码:int main(int argc, char *argv[]){ char buf[100]; memset(buf, 0, sizeof(buf)); snprintf(buf, sizeof(buf), "he原创 2010-05-09 21:38:00 · 1437 阅读 · 0 评论 -
C指针声明解读之右左法则
C指针声明解读之左右法则 C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用来解决如何辩识一个声明的,两者可以说是相反的。右左法则的英文原文是这样说的:转载 2008-03-30 15:59:00 · 1577 阅读 · 0 评论 -
微软亚洲技术中心面试题
1.进程和线程的差别。 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 (2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行 (3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源. (4)系统开销:转载 2008-03-30 16:02:00 · 912 阅读 · 0 评论 -
嵌入式程序员应知道的0x10个基本问题
嵌入式程序员应知道的0x10个基本问题1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:1) #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2)懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有转载 2008-03-27 20:03:00 · 840 阅读 · 0 评论 -
线程的同步
线程的同步一.互斥锁尽管在Posix Thread中同样可以使用IPC的信号量机制来实现互斥锁mutex功能,但显然semphore的功能过于强大了,在Posix Thread中定义了另外一套专门用于线程同步的mutex函数。1.创建和销毁有两种方法创建互斥锁,静态方式和动态方式。POSIX定义了一个宏PTHREAD_MUTEX_INITIALIZER来静态初始化互斥锁,方法如下:p转载 2008-03-16 09:42:00 · 936 阅读 · 0 评论 -
线程终止时的清理
线程终止时的清理 最经常出现的情形是资源独占锁的使用:线程为了访问临界资源而为其加上锁,但在访问过程中被外界取消,如果线程处于响应取消状态,且采用异步方式响应,或者在打开独占锁以前的运行路径上存在取消点,则该临界资源将永远处于锁定状态得不到释放。外界取消操作是不可预见的,因此的确需要一个机制来简化用于资源释放的编程。 在POSIX线程API中提供了一个pt转载 2008-03-15 11:18:00 · 1130 阅读 · 0 评论 -
Select()系统调用及文件描述符集fd_set的应用
Select()系统调用及文件描述符集fd_set的应用在网络程序中,一个进程同时处理多个文件描述符是很常见的情况。select()系统调用可以使进程检测同时等待的多个I/O设备,当没有设备准备好时,select()阻塞,其中任一设备准备好时,select()就返回。select()的调用形式为:#include #include int select(int maxfd, fd_set *rea转载 2008-03-01 16:50:00 · 2274 阅读 · 0 评论 -
sscanf()用法
函数原型:int scanf( const char *format [,argument]... );int sscanf(const char *buffer, const char *format [argument ] ... );1.sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。2.其中的format可以是一个或多个{%[*转载 2008-03-01 16:45:00 · 682 阅读 · 0 评论 -
C语言之main()函数
C的设计原则是把函数作为程序的构成模块。main()函数称之为主函数,一个C程序总是从main()函数开始执行的。一、main()函数的形式在最新的 C99 标准中,只有以下两种定义方式是正确的:int main( void )--无参数形式{...return 0;}int main( int argc, char *argv[] )--带参数形式{...return 0;}int指明了main转载 2008-03-01 16:44:00 · 5001 阅读 · 0 评论 -
gethostbyname用法
使用这个东西,首先要包含2个头文件:#include #include struct hostent *gethostbyname(const char *name);这个函数的传入值是域名或者主机名,例如"www.google.com","wpc"等等。传出值,是一个hostent的结构(如下)。如果函数调用失败,将返回NULL。struct hostent { char *h_name转载 2008-03-02 10:26:00 · 62000 阅读 · 25 评论