当前位置:文档之家› Linux内核中读写文件

Linux内核中读写文件

Linux内核中读写文件
Linux内核中读写文件

内核中读写文件

1.filp_open()在kernel中可以打开文件,其原形如下:

Struct file* filp_open(const char* filename, int open_mode, int mode);

该函数返回strcut file*结构指针,供后继函数操作使用,该返回值用IS_ERR()来检验其有效性。

2. 读写文件(vfs_read/vfs_write)

kernel中文件的读写操作可以使用vfs_read()和vfs_write,在使用这两个函数前需要说明一下get_fs()和set_fs()这两个函数。

vfs_read() vfs_write()两函数的原形如下:

ssize_t vfs_read(struct file* filp, char __user* buffer, size_t len, loff_t* pos);

ssize_t vfs_write(struct file* filp, const char __user* buffer, size_t len, loff_t* pos);

注意这两个函数的第二个参数buffer,前面都有__user修饰符,这就要求这两个buffer指针都应该指向用空的内存,如果对该参数传递kernel空间的指针,这两个函数都会返回失败-EFAULT。但在Kernel中,我们一般不容易生成用户空间的指针,或者不方便独立使用用户空间内存。要使这两个读写函数使用kernel空间的buffer指针也能正确工作,需要使用set_fs()函数或宏(set_fs()可能是宏定义),如果为函数,其原形如下:

void set_fs(mm_segment_t fs);

该函数的作用是改变kernel对内存地址检查的处理方式,其实该函数的参数fs只有两个取值:USER_DS,KERNEL_DS,分别代表用户空间和内核空间,默认情况下,kernel取值为USER_DS,即对用户空间地址检查并做变换。那么要在这种对内存地址做检查变换的函数中使用内核空间地址,就需要使用set_fs(KERNEL_DS)进行设置。get_fs()一般也可能是宏定义,它的作用是取得当前的设置,这两个函数的一般用法为:

mm_segment_t old_fs;

old_fs = get_fs();

set_fs(KERNEL_DS);

...... //与内存有关的操作

set_fs(old_fs);

还有一些其它的内核函数也有用__user修饰的参数,在kernel中需要用kernel空间的内存代替时,都可以使用类似办法。

使用vfs_read()和vfs_write()最后需要注意的一点是最后的参数

loff_t * pos,pos所指向的值要初始化,表明从文件的什么地方开始读写。代码:写入hello world到output.txt

#include "linux/init.h"

#include "linux/kernel.h"

#include "linux/module.h"

#include "linux/fs.h"

#include "asm/uaccess.h"

static char buf[]="Hello World";

static char buf1[20]={"\0"};

static int __init hello_init(void) {

struct file *fp;

mm_segment_t fs;

loff_t pos;

fp=filp_open("./output.txt",O_RDWR|O_CREAT,0644);

if(IS_ERR(fp)){

printk("create file error\n");

return -1;

}

fs=get_fs();

set_fs(KERNEL_DS);

pos=0;

pos=0;

vfs_read(fp,buf1,sizeof(buf),&pos);

printk("read %s\n",buf1);

filp_close(fp,NULL);

set_fs(fs);

return 0;

}

static void __exit hello_exit(void) {

printk(KERN_ALERT "Goodbye!\n"); }

module_init(hello_init);

module_exit(hello_exit);

MODULE_LICENSE("GPL");

MODULE_DESCRIPTION("hello");

代码2:创建线程循环写入1~9

#include "linux/init.h"

#include "linux/kernel.h"

#include "linux/module.h"

#include "linux/fs.h"

#include "asm/uaccess.h"

#include "linux/sched.h"

#include "linux/kthread.h"

#include "linux/delay.h"

static char buf[1]="1";

static struct task_struct *my_thread=NULL; static struct file *fp;

static mm_segment_t fs;

static loff_t pos;

int thread_func(void *data){

while(!kthread_should_stop()){

fs=get_fs();

set_fs(KERNEL_DS);

if(buf[0]<'9'){

buf[0]++;

}else{

buf[0]='1';

}

set_fs(fs);

ssleep(3);

}

filp_close(fp,NULL);

return 0;

}

static int __init hello_init(void){

fp=filp_open("output.txt",O_RDWR|O_CREAT,0644);

if(IS_ERR(fp)){

printk("create file error\n");

return -1;

}

my_thread=kthread_run(thread_func,NULL,"my_thread");

return 0;

}

static void __exit hello_exit(void) {

if(my_thread){

printk("stop mythread\n");

kthread_stop(my_thread);

}

}

module_init(hello_init);

module_exit(hello_exit);

MODULE_LICENSE("GPL");

MODULE_DESCRIPTION("hello");

Makefile:

obj-m:=*.o

KERNELBUILD :=/lib/modules/$(shell uname -r)/build default:

make -C $(KERNELBUILD) M=$(shell pwd) modules clean:

rm -rf *.o *.ko *.mod.c .*.cmd *.markers *.order

*.symvers .tmp_versions

Linux常用命令

Linux常用命令1、查看当前工作路径:pwd 示例: 2、列出目录中的内容:ls 格式: ls [选项] [目录名称] 常用选项和参数: -l :显示文件和目录的详细信息。 -d : 显示目录名称而非其内容。 -S : 按文件和目录的大小排序。 -t : 按文件和目录的更改时间排序。 -a :显示目录中的文件和文件夹,包括隐藏文件。 示例: ?查看当前目录下的文件和文件夹详细信息。 3、切换工作目录:cd 格式: cd [目录名称] (直接执行cd命令,进入个人主目录。)示例:

4、创建目录:mkdir 格式: mkdir [选项] [目录名称] 常用选项和参数: -p :确保目录名称存在,如果目录不存在的就新创建一个。 示例: ?在/test/test1目录下创建一个名称为“test2”的目录。(/test目录下还没有创建test1,添加-p参数一次性创建) 5、创建文件:touch 格式: touch [文件名称] 示例: ?创建一个名称为“linux”的文件。 6、删除文件或目录:rm 格式: rm [选项] [文件或目录名称] 常用选项和参数: -f :强制删除文件或目录。 -r :递归处理,将指定目录下的所有文件及子目录一并处理。 示例: ?删除一个名称为“/test1”的目录。

7、移动或更名现有的文件或目录:mv 格式: mv[选项][源文件或目录][目标文件或目录] 常用选项和参数: -f :若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录。 示例: ?将/etc/hosts文件移动到/home目录。 8、复制文件或目录:cp 格式: cp[选项][源文件或目录][目标文件或目录] 常用选项和参数: -a :此参数的效果和同时指定"-dpR"参数相同。 -d :当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录。 -p :保留源文件或目录的属性。 -R :递归处理,将指定目录下的所有文件与子目录一并处理。 示例: ?复制/var/log/messages文件到/home目录。 cp /var/log/messages /home ?复制/var/log文件夹到/home目录。 cp -a /var/log /home

Linux内核崩溃原因分析及错误跟踪技术

Linux内核崩溃原因分析及错误跟踪技术 随着嵌入式Linux系统的广泛应用,对系统的可靠性提出了更高的要求,尤其是涉及到生命财产等重要领域,要求系统达到安全完整性等级3级以上[1],故障率(每小时出现危险故障的可能性)为10-7以下,相当于系统的平均故障间隔时间(MTBF)至少要达到1141年以上,因此提高系统可靠性已成为一项艰巨的任务。对某公司在工业领域14 878个控制器系统的应用调查表明,从2004年初到2007年9月底,随着硬软件的不断改进,根据错误报告统计的故障率已降低到2004年的五分之一以下,但查找错误的时间却增加到原来的3倍以上。 这种解决问题所需时间呈上升的趋势固然有软件问题,但缺乏必要的手段以辅助解决问题才是主要的原因。通过对故障的统计跟踪发现,难以解决的软件错误和从发现到解决耗时较长的软件错误都集中在操作系统的核心部分,这其中又有很大比例集中在驱动程序部分[2]。因此,错误跟踪技术被看成是提高系统安全完整性等级的一个重要措施[1],大多数现代操作系统均为发展提供了操作系统内核“崩溃转储”机制,即在软件系统宕机时,将内存内容保存到磁盘[3],或者通过网络发送到故障服务器[3],或者直接启动内核调试器[4]等,以供事后分析改进。 基于Linux操作系统内核的崩溃转储机制近年来有以下几种: (1) LKCD(Linux Kernel Crash Dump)机制[3]; (2) KDUMP(Linux Kernel Dump)机制[4]; (3) KDB机制[5]; (4) KGDB机制[6]。 综合上述几种机制可以发现,这四种机制之间有以下三个共同点: (1) 适用于为运算资源丰富、存储空间充足的应用场合; (2) 发生系统崩溃后恢复时间无严格要求; (3) 主要针对较通用的硬件平台,如X86平台。 在嵌入式应用场合想要直接使用上列机制中的某一种,却遇到以下三个难点无法解决: (1) 存储空间不足 嵌入式系统一般采用Flash作为存储器,而Flash容量有限,且可能远远小于嵌入式系统中的内存容量。因此将全部内存内容保存到Flash不可行。

linux导出文件到本地

测试环境是linux服务器,所以经常会传输文件到服务器,或者从服务器下载文件。如果服务器安装了FTP,那么直接用FTP软件来下载就可以了,如果没有安装,那么就要用DOS命令来解决了,以下以下载文件到windows本机为例,简单说下整个过程。 一、服务器文件打包 注:因为我经常要下载很多文件,而且文件也比较大,所以需要打包,如果你只是下载单个文件或文件大小不大,那就省略此步吧。 1、本机上打开cmd窗口,用telnet命令登录服务器,具体命令用法是:telnet 服务器IP地址,如要登录的服务器地址是10.10.10.10 ,那么按下图输入 2、回车,输入用户名和密码登录服务器 3、进入要下载的文件或文件夹所在的目录 4、使用tar命令对文件或文件夹打包。 5. 语法:tar命令 一、功能说明:用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件 二、参数: -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。 -z:有gzip属性的

-j:有bz2属性的 -Z:有compress属性的 -v:显示所有过程 -O:将文件解开到标准输出 下面的参数-f是必须的 -f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。 三、举例说明: tar -cf all.tar *.jpg 这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。 tar -rf all.tar *.gif 这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。tar -uf all.tar logo.gif 这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。 tar -tf all.tar 这条命令是列出all.tar包中所有文件,-t是列出文件的意思 tar -xf all.tar 这条命令是解出all.tar包中所有文件,-t是解开的意思 压缩 tar –cvf jpg.tar *.jpg //将目录里所有jpg文件打包成jpg.tar tar –czf jpg.tar.gz *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip 压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz tar –cjf jpg.tar.bz2 *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2 tar –cZf jpg.tar.Z *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z rar a jpg.rar *.jpg //rar格式的压缩,需要先下载rar for linux zip jpg.zip *.jpg //zip格式的压缩,需要先下载zip for linux 解压 tar –xvf file.tar //解压 tar包 tar -xzvf file.tar.gz //解压tar.gz tar -xjvf file.tar.bz2 //解压 tar.bz2 tar –xZvf file.tar.Z //解压tar.Z

Linux文件传输常用命令

Linux文件传输常用命令 1. uuto命令 uuto命令可将文件传送到远端的UUCP主机,并在完成工作后,以邮件通知远端主机上的用户。 语法: uuto [文件][目的] 参数: 文件:需要执行传送的文件 目的:指定目标文件或路径 实例 uuto./test1 localhost/www #将文件test1传送至远程UUCP 主机localhost的www目录 2. uupick命令 uupick命令是用来处理传送进来的文件。 语法: uupick [-v][-I<配置文件>][-s<主机>][-x<层级>][--help] 参数: -I<配置文件>或--config<配置文件>:指定配置文件。 -s<主机>或--system<主机>:处理由指定主机传送过来的文件。 -v或—version:显示版本信息。 --help:显示帮助。

实例: uupick-s localhost 传送由主机localhost传送过来的文件 3. tftp 命令 tftp命令用于传输文件,tftp是简单的文字模式ftp程序,它所使用的指令和FTP类似。 语法: tftp(选项)(参数) 选项: -c:指定与tftp服务器连接成功后,立即要执行的指令; -m:指定文件传输模式。可以是ASCII或者Binary; -v:显示指令详细执行过程; -V:显示指令版本信息。 参数: 主机:指定tftp要联机的tftp服务器的ip地址或主机名 实例: tftp -g -r test 192.168.0.1 从IP地址为192.168.0.1远程主机上下载test文件 4. ncftp命令 ncftp命令用于传输文件,当不指定用户名时,ncftp 命令会自动尝试使用匿名账户anonymous 去连接远程FTP 服务器,不需要用户输入账号和密码语法: ncftp [主机或IP地址]

linux查看文件大小命令

linux查看文件大小命令 linux系统不像windows系统,查看文件可以随时点击右键,linux中碳钢命令来查看文件大小,下面由小编为大家整理了linux查看文件命令的相关知识,希望对大家有帮助! linux查看文件命令详解 du [-abcDhHklmsSx] [-L <符号连接>][-X <文件>][--block-size][--exclude=<目录或文件>] [--max-depth=<目录层数>][--help][--version][目录或文件] 常用参数: -a或-all 为每个指定文件显示磁盘使用情况,或者为目录中每个文件显示各自磁盘使用情况。 -b或-bytes 显示目录或文件大小时,以byte为单位。 -c或–total 除了显示目录或文件的大小外,同时也

显示所有目录或文件的总和。 -D或–dereference-args 显示指定符号连接的源文件大小。 -h或–human-readable 以K,M,G为单位,提高信息的可读性。 -H或–si 与-h参数相同,但是K,M,G是以1000为换算单位,而不是以1024为换算单位。 -k或–kilobytes 以1024 bytes为单位。 -l或–count-links 重复计算硬件连接的文件。 -L<符号连接>或–dereference<符号连接> 显示选项中所指定符号连接的源文件大小。 -m或–megabytes 以1MB为单位。 -s或–summarize 仅显示总计,即当前目录的大小。

探究linux内核,超详细解析子系统

探究linux内核,超详细解析子系统 Perface 前面已经写过一篇《嵌入式linux内核的五个子系统》,概括性比较强,也比较简略,现在对其进行补充说明。 仅留此笔记,待日后查看及补充!Linux内核的子系统 内核是操作系统的核心。Linux内核提供很多基本功能,如虚拟内存、多任务、共享库、需求加载、共享写时拷贝(Copy-On-Write)以及网络功能等。增加各种不同功能导致内核代码不断增加。 Linux内核把不同功能分成不同的子系统的方法,通过一种整体的结构把各种功能集合在一起,提高了工作效率。同时还提供动态加载模块的方式,为动态修改内核功能提供了灵活性。系统调用接口用户程序通过软件中断后,调用系统内核提供的功能,这个在用户空间和内核提供的服务之间的接口称为系统调用。系统调用是Linux内核提供的,用户空间无法直接使用系统调用。在用户进程使用系统调用必须跨越应用程序和内核的界限。Linux内核向用户提供了统一的系统调用接口,但是在不同处理器上系统调用的方法

各不相同。Linux内核提供了大量的系统调用,现在从系统 调用的基本原理出发探究Linux系统调用的方法。这是在一个用户进程中通过GNU C库进行的系统调用示意图,系 统调用通过同一个入口点传入内核。以i386体系结构为例,约定使用EAX寄存器标记系统调用。 当加载了系统C库调用的索引和参数时,就会调用0x80软件中断,它将执行system_call函数,这个函数按照EAX 寄存器内容的标示处理所有的系统调用。经过几个单元测试,会使用EAX寄存器的内容的索引查system_call_table表得到系统调用的入口,然后执行系统调用。从系统调用返回后,最终执行system_exit,并调用resume_userspace函数返回用户空间。 linux内核系统调用的核心是系统多路分解表。最终通过EAX寄存器的系统调用标识和索引值从对应的系统调用表 中查出对应系统调用的入口地址,然后执行系统调用。 linux系统调用并不单层的调用关系,有的系统调用会由

Linux中C语言open函数打开或创建文件详细讲解

Linux中C语言open函数打开或创建文件详细讲解 头文件: #include #include #include 函数原型: int open( const char * pathname, int flags); int open( const char * pathname,int flags, mode_t mode); 作用:以各种方式打开文件 返回值:返回打开的文件句柄,-1打开失败 函数说明参数pathname指向欲打开的文件路径字符串,既可以是相对路径也可以是绝对路径。flags参数有一系列常数值可供选择,可以同时选择多个常数用按位或运算符连接起来,所以这些常数的宏定义都以O_开头,表示or 下列是参数flags所能使用的旗标: 必选项:以下三个常数中必须指定一个,且仅允许指定一个。 O_RDONLY以只读方式打开文件 O_WRONLY以只写方式打开文件 O_RDWR以可读写方式打开文件。上述三种旗标是互斥的,也就是不可同时使用,但可与下列的旗标利用OR(|)运算符组合。 以下可选项可以同时指定0个或多个,和必选项按位或起来作为flags参数。 O_CREAT若欲打开的文件不存在则自动建立该文件。 O_EXCL如果O_CREAT也被设置,此指令会去检查文件是否存在。文件若不存在则建立该文件,否则将导致打开文件错误。此外,若O_CREAT与O_EXCL同时设置,并且欲打开的文件为符号连接,则会打开文件失败。 O_NOCTTY如果欲打开的文件为终端机设备时,则不会将该终端机当成进程控制终端机。 O_TRUNC若文件存在并且以可写的方式打开时,此旗标会令文件长度清为0,而原来存于该文件的资料也会消失。 O_APPEND当读写文件时会从文件尾开始移动,也就是所写入的数据会以附加的方式加入到文件后面。 O_NONBLOCK以不可阻断的方式打开文件,也就是无论有无数据读取或等待,都会立即返回进程之中。 O_NDELAY同O_NONBLOCK。 O_SYNC以同步的方式打开文件。

linux文件命令基础练习

练习一: Shell 基础命令 (1)一、练习目的 1、 掌握目录和文件操作的常用命令。 二、练习内容1、 目录操作命令练习:在SHELL 终端中练习以下命令(并记录结果,回答所提问题): 假设当前用户是zsc ,查看当前目录命令:pwd (问题:当前的路径是什么?绝对路径与相对路径区别是什么?命令提示符由哪几部分组成?)/home/zsc 命令提示符组成部分:用户名、z 主机名、当前路径[root@localhost ~] 查看目录内容命令:ls -al (问题:隐藏文件有何特点?显示文件属性的每一行信息各部分的含义是什么?,怎样查看目录自身属性信息?)隐藏文件名的前面有个小数点 每一条信息各部分含义分别是:文件类型、文件权限、硬链接文件个数、文件所有者、文件所属组、文件实际大小、最后修改时间、文件名称Ls – dl ·d wxr -x---- 16 root 4096 03-24 22:55(1)·- 一般文件·d 目录文件·l 符号链接文件·b 块设备文件·c 字符型设备文件 (2)r 表示读权限W 表示写权限x 表示执行权限、管路敷设技术通过管线敷吊顶层配置不规范高中资料试卷问题,而且可保障各类管路习题到位。在管路敷设过程中,要加强看护关于管路高中资料中资料试卷弯扁度固定盒位置保护层防腐跨接地线弯曲半径标高等,要求技术交底。管线敷设技术中包含线槽、管架等多项方式,为解决高中语文电气课件中管壁薄、接口不严等问题,合理利用管线敷设技术。线缆敷设原则:在分线盒处,当不同电压回路交叉时,应采用金属隔板进行隔开强电回路须同时切断习题电源,线缆敷设完毕,要进行检查和检测处理。、电气课件中调试对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所互作用与相互关系,根据生产工艺对电气设备进行空载与带负荷下高中资料试卷调控试验;对设备进行调整使其在正常工况下与过度工作下都可以正常工作整核对定值,审核与校对图纸,编写复杂设备与装置高中资料试卷调试方案,编写重要设备高中资料试卷试验方案以及系统启动方案;对整套启动过程中高中资料试卷电气设备进行调试工作并且进行过关运行高中资料试卷技术指导。对于调试过程中高中资料试卷技术问题,作为调试人员,需料、设备制造厂家出具高中资料试卷试验报告与相关技术资料,并且了解现场设备高中资料试卷布置情况电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。、电气设备调试高中资料试卷技术护装置调试技术,电力保护高中资料机组在进行继电保护高中资料试卷总体配置时,需要在最大限度内来确保机组高中资料试卷安全,并且尽可能地缩小故障高围,或者对某些异常高中资料试卷工况进行自动处理,尤其要避免错误高中资料试卷保护装置动作,并且拒绝动作,来避免不必要高中资料试卷突然停机。因此,电力高中资料试卷保护装置调试技术,要求电力保护装置做到准确灵活。对于差动保护装置高中资料试卷调试技术是指发电机一变时,需要进行外部电源高中资料试卷切除从而采用高中资料试卷主要保护装置。

linux内核IMQ源码实现分析

本文档的Copyleft归wwwlkk所有,使用GPL发布,可以自由拷贝、转载,转载时请保持文档的完整性,严禁用于任何商业用途。 E-mail: wwwlkk@https://www.doczj.com/doc/ae17358792.html, 来源: https://www.doczj.com/doc/ae17358792.html,/?business&aid=6&un=wwwlkk#7 linux2.6.35内核IMQ源码实现分析 (1)数据包截留并重新注入协议栈技术 (1) (2)及时处理数据包技术 (2) (3)IMQ设备数据包重新注入协议栈流程 (4) (4)IMQ截留数据包流程 (4) (5)IMQ在软中断中及时将数据包重新注入协议栈 (7) (6)结束语 (9) 前言:IMQ用于入口流量整形和全局的流量控制,IMQ的配置是很简单的,但很少人分析过IMQ的内核实现,网络上也没有IMQ的源码分析文档,为了搞清楚IMQ的性能,稳定性,以及借鉴IMQ的技术,本文分析了IMQ的内核实现机制。 首先揭示IMQ的核心技术: 1.如何从协议栈中截留数据包,并能把数据包重新注入协议栈。 2.如何做到及时的将数据包重新注入协议栈。 实际上linux的标准内核已经解决了以上2个技术难点,第1个技术可以在NF_QUEUE机制中看到,第二个技术可以在发包软中断中看到。下面先介绍这2个技术。 (1)数据包截留并重新注入协议栈技术

(2)及时处理数据包技术 QoS有个技术难点:将数据包入队,然后发送队列中合适的数据包,那么如何做到队列中的数

激活状态的队列是否能保证队列中的数据包被及时的发送吗?接下来看一下,激活状态的队列的 证了数据包会被及时的发送。 这是linux内核发送软中断的机制,IMQ就是利用了这个机制,不同点在于:正常的发送队列是将数据包发送给网卡驱动,而IMQ队列是将数据包发送给okfn函数。

【IT专家】linux下打开chm格式文件

本文由我司收集整编,推荐下载,如有疑问,请与我司联系 linux下打开chm格式文件 首先我们安装一个打开chm文件的软件,这个软件叫chmsee. 在终端下运行:sudo apt-get install chmsee 安装完成后有可能还是打不开,这可能是系统升级时,如果xulrunner版本有变化,同样会导致chmsee无法运行,,查看/usr/lib中的xulrunner的版本(注:我的xulrunner的版本号为xulrunner-1.9)。然后建立下面四个链接:cd /usr/lib sudo ln -s xulrunner-1.9/libxul.so libxul.so sudo ln -s xulrunner-1.9/libxpcom.so libxpcom.so sudo ln -s xulrunner-1.9/libsqlite3.so libsqlite3.so sudo ln -s xulrunner-1.9/libmozjs.so libmozjs.so 如果还是有问题的话,可以试着把这四个链接删除掉然后再建立。其中删除链接的命令为:cd /usr/lib sudo rm libxul.so sudo rm libxpcom.so sudo rm libsqlite3.so sudo rm libmozjs.so ? ?在linux下打开chm格式文件的方式有多种,如:chmsee,chm-vewer等,但这些软件的安装要很多的依赖包,安装起来太烦,现在我向大家介绍一下firefox的chmreader插件,可通过fireforx打开chm文件,安装与使用都很方便。 ?1、从sourceforge/projects/chmreader下载chmreader. 2、从firefox中打开下载的xpi文件. 3、重新启动firefox就安装了chmreader插件. 4、打开chm文件(通过file中的open CHM files) 我打开chm文件的图:devhelp/htmlhelp/winhlp 帮助文件chm查看工具chm相关工具DevHelp/HtmlHelp/WinHelp帮助文件htmlhelp.berlios.de/ This project aims to provide: available reference documentation of open-source software in convienient HTML-based formats, such as Windows Compiled HTML Help (CHM) to provide the necessary tools for the generation of such books from the source documentation formats (may they be Texinfo, DocBook, LaTex, etc.), conversion among the diferent formats webserver based visualization (by hosting several books using MYSQL together with PHP or Python CGI scripts) platform-indenpendent GUI visualization tools perhaps a canonic XML based HTML help format LIDN: Linux Developer Network 这个站点有很多DevHelp书库。DevHelp是GNOME

Linux常用文件和目录类命令

常用文件和目录类命令练习linux (1)启动计算机,利用root用户登录到系统,进入字符提示界面。 (2)用pwd命令查看当前所在的目录。 (3)用ls命令列出此目录下的文件和目录。 (4)用-a选项列出此目录下包括隐藏文件在内的所有文件和目录。 (5)用man命令查看ls命令的使用手册。 (6)在当前目录下,创建测试目录test。 (7)利用ls命令列出文件和目录,确认test目录创建成功。 (8)进入test目录,利用pwd查看当前工作目录。 (9)利用touch命令在当前目录创建一个新的空文件newfile。 (10)利用cp命令复制系统文件/etc/profile到当前目录下。 (11)复制文本profile到一个新文件profile.bak,作为备份。 (12)用ll命令以长格式的形式列出当前目录下的所有文件,注意比较每个文件的 长度和创建时间的不同。 (13)用less命令分屏查看profile文件的内容,注意联系less命令的各个子命令, 例如b、p、q等并对“then”关键字查找。 (14)用grep命令在profile文件中对关键字“then”进行查询,并于上面的结果比 较。 (15)给文件profile创建一个软链接lnsprofile和一个硬链接lnhprofile。 (16)长格式显示文件profile、lnsprofile、lnhprofile的详细信息。注意比较3个文 件链接数的不同。 (17)删除文件profile,用长格式显示lnsprofile和lnhprofile的详细信息,比较文 件lnhprofile的链接数的变化。 (18)用less命令查看文件lnsprofile的内容,看看有什么结果。 (19)用less命令查看文件lnhprofile的内容,看看有什么结果。 (20)删除文件lnsprofile,显示当前目录下的文件列表,回到上层目录。 (21)用tar命令把目录打包。 (22)用gzip命令把打好的包进行压缩。 (23)把文件test.tar.gz改名为backup.tar.gz。 (24)显示当前目录下的文件和目录列表,确认重命名成功。 (25)把文件backup.tar.gz移动到test目录下。 (26)显示当前目录下的文件和目录列表,确认移动成功。 (27)进入test目录,显示目录中的文件列表。 (28)把文件test.tar.gz解包。 (29)显示当前目录下的文件和目录列表,复制test目录为testbak目录作为备份。 (30)查找root用户自己的主目录下所有名为newfile的文件。 (31)删除test子目录下的所有文件。 (32)利用rmdir命令删除空子目录test。 (33)回到上层目录,利用rm命令删除目录test和其下所有文件。

Linux基础命令

实验二Linux系统的常用命令【实验目的】 掌握Linux文件及目录处理常用命令的使用方法; 【实验重难点】 Linux各类命令的使用方法。 【实验内容与要求】 注意: 1.做实验之前先拍快照。 2.修改主机名为学生姓名拼音(每个字的首字母)及学号后两位。例如:修改主机名的方法:修改/etc/sysconfig/network。然后重启reboot. 3.正确截图为:必须有空色框中的内容。 错误截图: 一,目录操作命令 1.启动计算机,利用root用户登录到系统,查看提示符。 2.用pwd命令查看当前所在的目录。

3.用ls命令列出此目录下的文件和目录。 4.列出此目录下包括隐藏文件在内的所有文件和目录并且长格式显示。 5.进入/home目录下,创建测试目录test。 6.利用ls命令列出文件和目录,确认test目录创建成功。 7.进入test目录。 8.回到上一次工作目录,再删除test目录。

9.cd /后,进入/home的命令。(分别用绝对路径和相对路径进入) 相对路径 绝对路径 二,文件操作命令 1.利用touch命令,在/home目录创建一个新的空文件newfile。 2.利用cp命令复制系统文件/etc/profile到/home目录下,其命令为。 3.在/home中复制文件profile到一个新文件profile.bak,作为备份。 4.用长格形式列出当前目录下的所有文件,注意比较每个文件的长度和创建时间的不同。

5.查找 /etc下的passwd这个文件。 6.查找/home目录下的所有名为profile的文件。 7.在/home下面创建test目录,在test目录下创建目录a,在a目录下创建目录b,在b目录中创建目 录c.在目录c中创建d,用一个命令完成。 8.进入c目录中。删除目录d 9.回到b目录中,然后cd ../..看看到什么目录里去了。 10.在cd ~ 回到什么目录了。 11.在cd –回到什么目录。 12.删除test子目录下的所有文件 三,创建目录,切换目录、查看当前路径

Linux内核分析-网络[五]:网桥

看完了路由表,重新回到netif_receive_skb ()函数,在提交给上层协议处理前,会执行下面一句,这就是网桥的相关操作,也是这篇要讲解的容。 view plaincopy to clipboardprint? 1. s kb = handle_bridge(skb, &pt_prev, &ret, orig_dev); 网桥可以简单理解为交换机,以下图为例,一台linux机器可以看作网桥和路由的结合,网桥将物理上的两个局域网LAN1、LAN2当作一个局域网处理,路由连接了两个子网1.0和2.0。从eth0和eth1网卡收到的报文在Bridge模块中会被处理成是由Bridge收到的,因此Bridge也相当于一个虚拟网卡。 STP五种状态 DISABLED BLOCKING LISTENING LEARNING FORWARDING 创建新的网桥br_add_bridge [net\bridge\br_if.c] 当使用SIOCBRADDBR调用ioctl时,会创建新的网桥br_add_bridge。 首先是创建新的网桥: view plaincopy to clipboardprint?

1. d ev = new_bridge_dev(net, name); 然后设置dev->dev.type为br_type,而br_type是个全局变量,只初始化了一个名字变量 view plaincopy to clipboardprint? 1. S ET_NETDEV_DEVTYPE(dev, &br_type); 2. s tatic struct device_type br_type = { 3. .name = "bridge", 4. }; 然后注册新创建的设备dev,网桥就相当一个虚拟网卡设备,注册过的设备用ifconfig 就可查看到: view plaincopy to clipboardprint? 1. r et = register_netdevice(dev); 最后在sysfs文件系统中也创建相应项,便于查看和管理: view plaincopy to clipboardprint? 1. r et = br_sysfs_addbr(dev); 将端口加入网桥br_add_if() [net\bridge\br_if.c] 当使用SIOCBRADDIF调用ioctl时,会向网卡加入新的端口br_add_if。 创建新的net_bridge_port p,会从br->port_list中分配一个未用的port_no,p->br会指向br,p->state设为BR_STATE_DISABLED。这里的p实际代表的就是网卡设备。 view plaincopy to clipboardprint? 1. p = new_nbp(br, dev); 将新创建的p加入CAM表中,CAM表是用来记录mac地址与物理端口的对应关系;而刚刚创建了p,因此也要加入CAM表中,并且该表项应是local的[关系如下图],可以看到,CAM表在实现中作为net_bridge的hash表,以addr作为hash值,链入 net_bridge_fdb_entry,再由它的dst指向net_bridge_port。

Linux新建文件命令

Linux新建文件命令 一、t ouch命令。 touch命令用来修改文件的访问时间、修改时间。如果没有指定时间,则将文件时间属性改为当前时间。当指定文件不存在,则touch命令变为创建该文件。 语法: 选项介绍: -a: 只修改访问时间; -c: 如果指定文件不存在,则不创建文件; -d STRING-time: 用字符串格式的时间来指定时间属性的修改值; -m: 只修改指定文件的修改时间; -r refernce-file: 将指定文件的时间属性改为与reference-file时间属性相同的值; -t [[CC]YY]MMDDhhmm[.ss]: 用[[CC]YY]MMDDhhmm[.ss]这种时间格式来指定时间属性的修改值; 执行范例: $ ls #查看当前空的目录 $ touch text #指定文件不存在,创建文件text $ stat text # stat命令可能查看文件的时间属性。 File: `text' Size: 0 Blocks: 8 IO Block: 4096 regular empty file Device: 831h/2097d Inode: 211271681 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 514/ xxxx) Gid: ( 100/ users) Access: 2010-03-01 22:03:30.000000000 +0800 Modify: 2010-03-01 22:03:30.000000000 +0800

Change: 2010-03-01 22:03:30.000000000 +0800 $ cat text # 读文件 $ stat text # 发现文件的访问时间(Access)改变 File: `text' Size: 0 Blocks: 8 IO Block: 4096 regular empty file Device: 831h/2097d Inode: 211271681 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 514/ xxxx) Gid: ( 100/ users) Access: 2010-03-01 22:04:08.000000000 +0800 Modify: 2010-03-01 22:03:30.000000000 +0800 Change: 2010-03-01 22:03:30.000000000 +0800 $ echo "hello world" > text # 相当于写文件 $ stat text # 发现文件的修改时间(Modify)改变 File: `text' Size: 12 Blocks: 16 IO Block: 4096 regular file Device: 831h/2097d Inode: 211271681 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 514/ xxxx) Gid: ( 100/ users) Access: 2010-03-01 22:04:08.000000000 +0800 Modify: 2010-03-01 22:04:58.000000000 +0800 Change: 2010-03-01 22:04:58.000000000 +0800 $ touch text #将文件的访问时间、修改时间改为当前时间 $ stat text File: `text' Size: 12 Blocks: 16 IO Block: 4096 regular file

linux读取文件命令

显示文本命令大全(cat, tac, more,less,head,tail,nl,od) more命令2、cat命令3:tac命令,倒序显示4、head命令,可以指定显示那些内容5、tali命令,可以指定显示那些内容6、less 与more 类似,但是比more 更好的是,他可以[pg dn][pg up]翻页! 1、more 是我们最常用的工具之一,最常用的就是显示输出的内容,然后根据窗口的大小进行分页显示,然后还能提示文件的百分比; more 的语法、参数和命令; more [参数选项] [文件] 参数如下: +num 从第num行开始显示; -num 定义屏幕大小,为num行; +/pattern 从pattern 前两行开始显示; -c 从顶部清屏然后显示; -d 提示Press space to continue, 'q' to quit.(按空键继续,按q键退出),禁用响铃功能;-l 忽略Ctrl+l (换页)字符; -p 通过清除窗口而不是滚屏来对文件进行换页。和-c参数有点相似; -s 把连续的多个空行显示为一行; -u 把文件内容中的下划线去掉 退出more的动作指令是q more 的参数应用举例; # more -dc /etc/profile 注:显示提示,并从终端或控制台顶部显示; # more +4 /etc/profile 注:从profile的第4行开始显示; # more -4 /etc/profile 注:每屏显示4行; # more +/MAIL /etc/profile 注:从profile中的第一个MAIL单词的前两行开始显示; more 的动作指令; 我们查看一个内容较大的文件时,要用到more的动作指令,比如ctrl+f(或空格键)是向下显示一屏,ctrl+b 是返回上一屏;Enter键可以向下滚动显示n行,要通过定,默认为1行; 我们只说几个常用的;自己尝试一下就知道了; Enter 向下n行,需要定义,默认为1行; Ctrl+f 向下滚动一屏; 空键向下滚动一屏; Ctrl+b 返回上一屏; = 输出当前行的行号;

linux系统调用和文件操作

零、本课程能学到的内容 1、文件系统及文件的IO操作。 2、linux的多进程编程。 3、linux的多线程编程。 4、进程及线程之间的同步和异步通信 5、linux的网络编程(编写服务器、客户端、TCP、UDP程序)。 一、linux的系统调用 用户程序通过软中断的方式,让cpu切换到内核态运行,数据就借此传输。 对于CPU来说,它不知道现在运行是用户程序还是内核程序。软中断后,cpu根据拿到的数据,进行特定的任务,然后退出中断,将任务的结果交回给用户程序。 这个任务如何描述?是通过数字来编号的。 例子:写一个打印字符串的程序,通过系统调用来完成。 需要传递的参数有:指向字符串的指针(字符串的首地址),字符串的长度。 汇编写法 用int$0x80产生软中断 C的写法 直接使用syscall函数(它的本质就是用软中断来产生系统调用) 系统调用编号见:/usr/include/asm/unistd_32.h里 一共有358个。其中,4号对应的write调用。 二、linux文件系统基础 扇区(sector):磁头读取的最小单位数据,在磁盘上类似一个扇子的形状。一般是512个字节。 块(block):软件读取磁盘的最小单位数据,一般来说是扇区的2的n次幂大小,常用的有4096个字节。 块就是文件存放的最小单位。如果有一个文件是15045个字节,那么就分成4个块存储,最后那个块的数据是不满的。 可以用数组的方式将一个文件的所有数据块的编号保存起来。

这个数组多大合适? 前提是数组大小要固定,才好管理。 用一个15元素的数组来保存数据块的编号。 其中0-11元素,保存数据块的前面12个,第12个元素是一个一级指针,指向另一个表格,那个表格是4096字节,可以保存1024个块的编号。 如果还不够,第13个元素是一个二级指针,指向的那个表格是一级指针表格。14个元素是三级指针,指向的表格是二级指针表格。 全部用完可以存储2G大小的文件的数据块编号。 在文件系统内部,如何来表示一个文件呢? 用一个inode结构体来表示一个文件。inode是index node的意思。也叫索引节点。一个索引节点对应一个文件,有多少个文件就有多少个索引节点。 inode结构体里面有文件的大小、文件的修改时间、文件的权限、文件的数据块的编号数组。 inode结构体数组保存了所有文件的inode,这个数组的下标就是inode编号。文件名或者目录名保存目录文件的数据块里面。在linux里面,一个目录也是一个文件,叫做目录文件,其它的叫做普通文件。目录文件里就有,inode编号和文件名的对应关系。 那么,给出文件路径时,如何找到这个文件的数据块? /usr/include/stdio.h 首先,找到根目录的数据块,从里面找到文件和inode编号关系表, 例如usr这个文件名和inode编号为10002是对应的,那么就到inode结构体数组里找出下标为10002的元素,得到对应文件usr的数据块,因为usr也是一个文件夹,既然是文件夹,它的数据块里面也会有关系表,就可以找到include这个文件的数据块,最后找到stdio.h的数据块,这个是一个普通文件,就把它的数据块全部取出来。 这里搜索的起点是根目录的数据块,那么这个文件的数据块到哪里找? 在一个磁盘里面,最开始的几个块,存储了本磁盘的很多重要数据,例如块的大小,有哪些inode下标空闲,哪些已经用了,最重要的是根目录的数据块。 所有的参数存放在其中的一个块,这个块叫做超级块(super block)。在磁盘格式化,实际就是生成一个超级块。这个块的重要性毋庸置疑,如果数据被损坏,则磁盘没办法使用。 三、打开文件 在linux里面,用open函数就可以打开一个文件。 函数原型:int open(const char*path,int flag) 函数如果打开成功,则返回一个文件描述符f ile d escribtor,这个描述符fd是一个非负整数。 1、文件描述符

linux文件管理与常用命令1

文件管理与常用命令(一) 1. 对命令行基本操作进行了解,具体步骤如下: (1)通过GNOME的终端仿真器熟悉命令行操作; (2)通过组合键CTRL+ALT+F1切换到终端TTY1,进行操作; (3)使用智能补全、历史记录等功能; (4)使用man、info查看cat、head、tail等命令的联机帮助。 2. 文件与目录基本操作命令 (1)用root帐号登录到终端,使用pwd命令查看当前目录; (2)使用cd命令将当前目录切换到/目录下; (3)使用ls命令查看Linux的目录结构,了解各个目录存放与系统相关的文件; (4)使用cat、more、head、tail等命令显示/etc/inittab文件内容; (5)使用grep命令在/etc/inittab文件中查询“initdefault”字符串; grep initdefault /etc/inittab (6)使用find和locate命令查找/目录下所有以main开头的文件,并显示这些文件的内容;find / -name “main*”–ls locate /main (7)用cp命令将/etc目录下的inittab文件和拷贝到/root目录下; cp /etc/inittab /root (8)使用sort或uniq命令对/root目录下的inittab文件排序后输出其结果; (9)统计inittab文件的字节数、行数、字数; wc -c -l -m -w (10)用mkdir命令在/root目录下创建一个test目录; (11)用cp命令将/etc目录及其下所有内容复制到test目录下; (12)使用cd和ls 查看/root/test/etc下的内容; (13)将test目录改名为test2;mv (14)删除test2目录。rm

相关主题
文本预览
相关文档 最新文档