Welcome 微信登录

首页 / 操作系统 / Linux

Linux C 格式化输出时要注意的问题

Linux C 格式化输出时要注意的问题

在Linux下提供了以下函数提供格式化输出,printf,fprintf,sprintf,snprintf。这些函数的头文件定义都是stdio.h。为标准的C库函数。 printf提供标准的输出流,fprintf往特定的流中写数据。前者比较常见,用的也较多。 sprintf格式化输入到字符指针缓冲,这个函数自动的加入null byte到缓冲,但是返回值不包括这个结束字节。 使用sprintf函数意缓冲溢出问题,用户要保证格式化数据的长度。 如下代码:#i...
Linux0.11之加载二进制文件

Linux0.11之加载二进制文件

因为先接触的是嵌入式OS,所以在阅读linux0.11源码的时候,总是会带些嵌入式OS惯性思维在思考,关于linux0.11中用户入口是我从头到尾看的过程中一直思考和寻求的问题,我很想知道对于一个用户的例程或者行为,内核的处理流程。先说下嵌入式OS,看嵌入式OS的时候我会在内核代码中看到一个用户API接口文件夹,里面封装了所有系统函数,供给用户调用,这样的一个接口形式非常清晰。嵌入式OS会提供main接口给用户插入自己的代码,比如创建进程,创建进程时指定入...
Linux0.11分析之内存分配(结合uCos和VxWorks)

Linux0.11分析之内存分配(结合uCos和VxWorks)

看了Linux0.11的malloc和free函数实现,很有感触,存储桶的概念以前没有接触过,我觉得很经典,至少在结构和设计上,让人喜欢。至于性能等其它方面众多的考虑,我想结合目前熟悉的uCos和VxWorks来谈一谈。首先看Linux0.11的存储桶原理及实现。桶很容易让人想到数组,先看下面几个数据结构。下图这个是存储桶描述符数据结构定义,描述一个存储桶。从图片中各个字段的描述中就可以明白个大概了,page指向一个页面,指向的这个页面就是一个存储桶,这个...
Linux0.11分析之创建进程

Linux0.11分析之创建进程

Linux0.11 中父进程创建子进程的通用模式如下所示。Father :……if (!(pid = fork ())){……(子进程执行部分)}……(父进程执行部分)为什么父进程和子进程的执行路径会是这样?大二孙志岗老师讲操作系统课程的时候,我就对这个问题非常纳闷,时隔两年多啊,现在才搞清楚了,感慨颇多啊。大家都知道,对于父进程 fork 返回子进程号,对于子进程 fork 返回 0 ,这也是执行路径如此的原因所在。但是, fork 的返回不同值的原因又...
TQ2440开发板交叉编译工具安装之后的环境变量设置

TQ2440开发板交叉编译工具安装之后的环境变量设置

TQ2440开发板中自带了一张光盘,里面有一个视频压缩包知道如何解压了交叉编译工具之后配置环境变量。但是我按照里面的做法做了,居然提示找不到编译工具。于是找人帮忙,最后终于搞好了,记录如下。1、其实不需要改 /etc/profile.2. 不要去改 /etc/bashrc3. 修改 /root/.bashrc,方法如下:上面这个地址就是你解压天嵌自带编译器的地址。我昨天试了用arm-linux-gcc 2.95.3,发现在上位机上面编译好的东西在开发板上运...
Linux知识:/root/.bashrc与/etc/profile的异同

Linux知识:/root/.bashrc与/etc/profile的异同

要搞清bashrc与profile的区别,首先要弄明白什么是交互式shell和非交互式shell,什么是login shell 和non-login shell。交互式模式就是shell等待你的输入,并且执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。 shell也可以运行在另外一种模式:非交互式模式。在这种模式下,shell不与你进行交互,而...
在XP下做Linux嵌入式系统移植 AT91SAM9260

在XP下做Linux嵌入式系统移植 AT91SAM9260

刚做好的linux2.6.33内核的配置,写点东西记录一下。因为我的PC物理机是XP系统,里面装了Ubuntu 10.10的虚拟机,本想在虚拟机下面做移植,虚拟机很悲剧地ping不通主机,也ping不通目标板,所以只能在XP下面做。首先要安装板子的驱动,硬件上,宿主机与目标板之间是用串口转USB连接,要是驱动不正确的话用超级终端是连不上的;软件连接上,我用得是putty,当然超级终端也可以。在移植过程中需要用到TFTP传送文件,所以要保证目标板和宿主机之间...
Linux设备驱动开发中有关scull模块的编译问题

Linux设备驱动开发中有关scull模块的编译问题

运行了一下《linux设备驱动程序》第三章的那个scull例子,发现出现如下错误提示: error: linux/config.h: No such file or directory我的系统内核版本是2.6.35的,config.h这个头文件貌似在2.6.19的内核版本后就没有了,搜了搜网上的文章,有些人说打过patch的没问题,这是肯定的,如果不打patch,就只有改代码了,又有人说只要在access.c中添加 #include <linux/s...
Linux0.11内核--汇编和C语言混合编程之参数传递

Linux0.11内核--汇编和C语言混合编程之参数传递

汇编语言中也需要通过某些途径来使用操作系统提供的服务,也就是系统调用;系统调用就是通过与操作系统内核通信来完成;系统调用会把用户态程序的调用转换成对系统内核服务的调用;Linux平台下有两种方式来使用系统调用:一种是利用封装后的C库(libc),另一种是通过汇编直接调用;其中,通过汇编语言来直接调用系统调用,是最高效地使用Linux内核服务的方法,因为最终生成的程序不需要与任何库进行连接,而是直接与内核通信;《Linux 0.11内核完全注释(PDF+源码...
Linux0.11内核--内核态与用户态

Linux0.11内核--内核态与用户态

内核态与用户态intel x86 架构的 CPU 分 Ring0-Ring3 三种级别的运行模式,Ring0级别最高,Ring3 最低。针对不同的 级别,有很多的限制,比如说传统的 in ,out 指令,就是端口的输入输出指令,在 Ring0 级下是可以用的,但在 Ring3 级下就不能用,你用就产生陷井,告诉你出错了,当然限制还有很多了,不只是这一点。操作系统下是利用这个特点,当操作系统自己的代码运行时, CPU 就切成 Ring0 级,当用户的程序运行...
Linux设备驱动之内存映射

Linux设备驱动之内存映射

1. 内存映射所谓的内存映射就是把物理内存映射到进程的地址空间之内,这些应用程序就可以直接使用输入输出的地址空间,从而提高读写的效率。Linux提供了mmap()函数,用来映射物理内存。在驱动程序中,应用程序以设备文件为对象,调用mmap()函数,内核进行内存映射的准备工作,生成vm_area_struct结构体,然后调用设备驱动程序中定义的mmap函数。2. 映射的种类把同一个物理地址映射为虚拟地址有两种方法,第一种是mmap()函数将物理地址映射到进程...
Android用MediaRecorder实现MPEG4视频监控

Android用MediaRecorder实现MPEG4视频监控

花了整整一个星期,终于把技术难点给突破了,貌似网上对这个讨论的较少。主要需要实现的功能是在Android手机上实时采集视频,并在远程比如PC机上实时显示出来,也就是以android手机作为监控摄像头。一开始查到的是smartcam的一个开源项目,看了下源代码,发现其实现原理是利用android 的camera图像的预采集,通过实现PreviewCallback类的回调函数onPreviewFrame,获得camera采集的原始图像数据之后,压成jpeg格式...
<< 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 >>