
linux内核之旅
文章平均质量分 73
乐于其中
勤奋 认真 严谨 坚持
展开
-
linux-schedule()学习——001
一#ifndef _SCHED_H#define _SCHED_H这是无参宏定义 :防止一个头文件被重复包含。二可见进程调度是整个内核的核心。但这部分,我想说明的是,我的pc是怎样把操作系统从硬盘装载到内存中,并启动进程调度模块的。首先,启动操作系统部分,涉及到到三个文件:/arch/i386/boot/bootsect.s、/arch/i386/boot/se原创 2013-10-23 22:09:55 · 1598 阅读 · 0 评论 -
零基础学习linux中的fork()函数
零基础学习fork()函数 一个进程,包括代码、数据和分配给进程的资源。fork的原意是:分裂。fork()函数通过系统调用创建(分裂)一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复原创 2013-10-23 20:19:20 · 830 阅读 · 0 评论 -
通过实例体会 fork()同时创建多个子进程
第一种方法:验证通过特点:同时创建多个子进程,每个子进程可以执行不同的任务,程序可读性较好,便于分析,易扩展为多个子进程#include #include int main(){ pid_t p1,p2; printf("before fork(),pid=%d\n",getpid());p1=fork();if(p1==0){printf(原创 2014-05-03 20:51:56 · 1808 阅读 · 0 评论 -
dir stat dirent
最近在看Linux下文件操作相关章节,遇到了这么几个结构体,被搞的晕乎乎的,今日有空,仔细研究了一下,受益匪浅。首先说说DIR这一结构体,以下为DIR结构体的定义:1. struct __dirstream 2. { 3. void *__fd; 4. char *__data; 5. int __entry_data;原创 2014-04-15 17:58:39 · 596 阅读 · 0 评论 -
初学linux 常用命令
linux下返回上一层目录:cd ..原创 2014-04-20 21:22:01 · 496 阅读 · 0 评论 -
unix中的计算器
执行命令:bc输入计算式:eg:2+3*4+6/2计算结束确认:Enter输出计算结果:17退出:Ctrl+D原创 2014-03-16 12:01:39 · 813 阅读 · 0 评论 -
Unix/Linux编程实践教程----cp1.c详解
/** cp1.c * version 1 of cp - uses read and write with tunable buffer size * * usage: cp1 src dest */#include #include #include #define BUFFERSIZE 4096#defi原创 2014-04-07 10:39:15 · 1359 阅读 · 1 评论 -
协同进程
本文参考博文:协同进程 过滤程序:UNIX系统过滤程序从标准输入读取数据,对其进行适当处理后写到标准输出。几个过滤程序通常在shell管道命令行中线性的连接。当一个程序产生某个过滤程序的输入,同时又读取该过滤程序的输出时,则该过滤程序就成为协同进程。 Korn Shell提供了协同进程,但是Bournce-again shell 和C Shell并没有提供按协同进原创 2014-05-19 12:06:28 · 712 阅读 · 0 评论 -
类 Unix 系统下常用工具小结
一、帮助查阅: man 运行 windows 程序,按下 f1,就能打开帮助窗口。但是类 Unix 系统中,man 命令能让你方便地打开想要查找的帮助。比如,想查找排序有关的帮助,用 man -k sort,就能看到熟悉的 qsort。 有时候我们往往查不到想要的手册,比如 man printf,出来的并不是我们想要的 c 函数说明,这就要用到 section,比如我们通过 m原创 2014-06-04 17:05:24 · 623 阅读 · 0 评论 -
shell的应用程序:监视系统用户(详解)
Logic-------------------get list of users(call it prev)while true原创 2014-06-04 17:02:26 · 606 阅读 · 0 评论 -
标准I/O与重定向的若干概念
1.三个数据流 标准输入:需要处理得数据流原创 2014-06-05 10:05:02 · 743 阅读 · 0 评论 -
将stdin定向到文件
进程并不是从文件读取数据,而是从文件描述符读取数据原创 2014-06-05 17:37:36 · 1913 阅读 · 0 评论 -
条件编译
条件编译就是按条件对C程序的一部分进行编译,其它部分不编译。条件编译的目的是使源代码能更迅速、更容易地进行修改,并使目标代码缩短。这样,当程序在不同系统上编译、在同一系统不同编译器上编译或进行不同目的的编译时,减少对程序语句的修改,而让编译预处理器把该语句留下或忽略。条件编译有#if语句、#if-elif语句、#ifdef语句、#ifndef语句。条件编译语句1.#if#if的一般原创 2014-05-26 15:16:23 · 654 阅读 · 0 评论 -
linux入门 ls命令编写之二------ls2:列对齐输出
In function ‘do_ls’: op.c:56:8: warning: incompatible implicit declaration of built-in function ‘strlen’ [enabled by default] solution:加上 #include 应该是“user”,而不是“/user”原创 2014-03-22 09:23:13 · 3661 阅读 · 0 评论 -
Unix/Linux编程实践教程参考答案-----第二章学习笔记
2.1key:1.w2.man3. what they are doing.4.man w 查出其信息来源files为:/var/run/utmp /proc man -k utmp:utmp的小节编号为:5 man 5 utmp: w所提供的信息及其含义: USER login name TTY the user原创 2014-03-27 12:07:04 · 2308 阅读 · 0 评论 -
linux-schedule()学习——002
一 系统调用和库函数究竟是什么关系(网上的答案汇总)1.系统调用是为了方便应用使用操作系统的接口,而库函数是为了方便人们编写应用程序而引出的,比如你自己编写一个函数其实也可以说就是一个库函数。2.系统调用可以理解为内核提供给我们在用户态用的接口函数,可以认为是某种内核的库函数。3.read就是系统调用,而fread就是C标准库函数.4.很多c函数库中的函数名与系原创 2013-10-25 17:02:53 · 1441 阅读 · 0 评论 -
linux-schedule()学习——003
一schedule()函数的调用二schedule()函数的切换原创 2013-10-25 17:07:39 · 648 阅读 · 0 评论 -
schdule的工作流程
schdule的工作流程①将prev和next设置为schedule最感兴趣的两个进程:其中一个是在调用schedule时正在运行的进程(prev),另外一个应该是接着就給予CPU的进程(next)。注意:prev和next可能是相同的-schedule可以重新调度已经获得cpu的进程.②中断处理程序运行"下半部分".③内核实时系统部分的实现,循环调度程序(SCHED_RR)通过移原创 2013-10-31 11:17:54 · 1538 阅读 · 0 评论 -
系统调用
注释:蓝色代表相关概念即自己需要注意的地方。红色代表自己仍然一知半解的地方 玫红代表代码详细注释段 绿色代表可以扩充的或者实践编写的地方 内核发展到现在,我们实际需要的系统调用现在已经十分完美,从这个意义上来说,再耗费宝贵的时间去研究系统调用的实现是毫无意义的事情。然而,对于希望能够对内核有更深理解的来说,仔细研究少量系统调用仍是十分值得的。这原创 2013-11-01 09:58:26 · 807 阅读 · 0 评论 -
Helloworld内核模块的开发
一.Helloworld内核模块的开发 1.hellomod.c程序源代码#include#include static int moduletest_init(void){ printk(“Helloworld!\n”); return 0;} static void moduletest_exit(void){ printk(“Goo原创 2013-11-05 22:20:32 · 746 阅读 · 0 评论 -
编写一个linux内核模块,用以创建、增加、删除、和遍历一个双向链表
list.c文件 #include// 驱动要写入内核,与内核相关的头文件 #include//对模块的结构定义,以及模块的版本控制 #include//包含了kcalloc、kzalloc内存分配函数的定义 #include//linux内核通用链表#include//初始化头文件 MODULE_LICENSE("GPL");MODULE_AURHOR("XIYO原创 2013-12-17 15:57:34 · 944 阅读 · 0 评论 -
linux驱动头文件位置和头文件的说明 .
在不同版本的内核源码上,头文件所在的位置是不同的,比如说在#include#include同样是regs-gpio.h,是在比较低的版本(比如2.6.25)上位于arch/arm/include/asm中,而mach/regs-gpio.h则是位于arch/arm/mach-s3c2410/include/mach中,2.6.30版本的内核是这种结构,所以,要根据所采用的不转载 2013-12-17 15:42:03 · 1669 阅读 · 0 评论 -
新手上路 如何学习嵌入式linux
作为一个新人,怎样学习嵌入式Linux?被问过太多次,特写这篇文章来回答一下。在学习嵌入式Linux之前,肯定要有C语言基础。汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会)。C语言要学到什么程度呢?越熟当然越好,不熟的话也要具备基本技能。比如写一个数组排序、输入数字求和什么的。学C语言唯一的方法是多写程序多练习,编译出错没关系,自己去解决;执行出错没关系,自己去分析。以前我转载 2013-12-17 15:55:31 · 1051 阅读 · 0 评论 -
控制寄存器
控制寄存器(CR0~CR3)用于控制和确定处理器的操作模式以及当前执行任务的特性。CR0中含有控制处理器操作模式和状态的系统控制标志;CR1保留不用;CR2含有导致页错误的线性地址;CR3中含有页目录表物理内存基地址,因此该寄存器也被称为页目录基地址寄存器PDBR(Page-Directory Base address Register)。 1.CR0中协处理器控制位CR0的4个位:扩展类原创 2013-12-19 15:38:19 · 1201 阅读 · 0 评论 -
linux入手小程序——任何一个程序的运行只有借助于操作系统才能得以顺利完成的小实例
test.c#includemain(){ printf("hello world\n"); return 0;}原创 2013-12-16 16:40:17 · 864 阅读 · 0 评论 -
linux下库函数的所包含的内容简单整理
#include 是POSIX标准定义的unix类系统定义符号常量的头文件,包含了许多UNIX系统服务的函数原型,例如read函数、write函数和getpid函数原创 2014-04-15 17:45:15 · 669 阅读 · 0 评论 -
解读unix/linux编程实践教程------cp1.c延伸1
/** sol03.14.c ** ------------------------------------------------------------sol03.14.c is arevised version of cp1.c that can copy an entire directoryfile by file to a second directory. It a原创 2014-04-14 22:23:32 · 937 阅读 · 0 评论 -
ubuntu 下程序编写的程序
在相应文件夹中建立自己的文件$ mkdir xxx$touch x.c vim X.c按键i进入编译器编辑完毕 按esc按: 输入wq(保存退出)gcc X.c -o XXXX //前者是.c文件名称,后者是文件夹名称运行 输入 ./XXXX(注意是点(.)杠(/)XXXX)原创 2014-03-21 21:41:04 · 634 阅读 · 0 评论 -
linux入门 ls命令编写之一------ls1
编译环境:ubuntu下用Eclipse 编译过程:1.building project:file->new->project->next->project name->linux GCC->finish 2.building file:file->new->source file->soure file name by the end of原创 2014-03-16 11:52:58 · 911 阅读 · 0 评论 -
堆&栈
内存分配方式有三种:[1]从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。[2]在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。[3]从堆上分配,亦称动态内存分配。程序在运翻译 2015-06-17 13:54:35 · 384 阅读 · 0 评论