自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

转载 FNV哈希算法

由来:FNV哈希算法全名为Fowler-Noll-Vo算法,是以三位发明人Glenn Fowler,Landon Curt Noll,Phong Vo的名字来命名的,最早在1991年提出。特点和用途:FNV能快速hash大量数据并保持较小的冲突率,它的高度分散使它适用于hash一些非常相近的字符串,比如URL,hostname,文件名,text,IP地址等。算法版本:FNV算法有两

2014-04-14 16:31:12 29715

转载 共享内存函数(shmget、shmat、shmdt、shmctl)

共享内存函数由shmget、shmat、shmdt、shmctl四个函数组成。下面的表格列出了这四个函数的函数原型及其具体说明。

2014-04-13 21:31:09 1529

转载 eventfd函数

eventfd 在内核版本,2.6.22以后有效。查看内核版本可以用命令 uname -r 。[cpp] view plaincopyprint?"font-size:14px;">#include  int eventfd(unsigned int initval,int flags);  这个函数会创建一个 事件对象 (e

2014-04-13 19:04:35 13926

转载 socket编程之addrinfo结构体与getaddrinfo函数

1. 概述IPv4中使用gethostbyname()函数完成主机名到地址解析,这个函数仅仅支持IPv4,且不允许调用者指定所需地址类型的任何信息,返回的结构只包含了用于存储IPv4地址的空间。IPv6中引入了getaddrinfo()的新API,它是协议无关的,既可用于IPv4也可用于IPv6。getaddrinfo函数能够处理名字到地址以及服务到端口这两种转换,返回的是一个addrin

2014-04-13 16:56:06 10105 1

转载 Linux进程间通讯方式之管道pipe

Linux 进程间通讯方式有以下几种:1-》管道(pipe)和有名管道(fifo).2-》消息队列3-》共享内存4-》信号量5-》信号(signal)6-》套接字(sicket)

2014-04-13 15:11:29 1517

转载 linux中fork函数

一、fork入门知识     一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。    一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来

2014-04-13 11:21:24 710

转载 stat函数与结构体

stat(取得文件状态)相关函数fstat,lstat,chmod,chown,readlink,utime表头文件#include#include定义函数int stat(const char * file_name,struct stat *buf);函数说明stat

2014-04-13 10:39:11 1130

原创 strtok、strtok_s、strtok_r 字符串分割函数

strtokstrtok函数

2014-04-11 21:31:33 100647 4

原创 strdup -- 复制字符串

头文件:#include 定义函数:char * strdup(const char *s);函数说明:strdup()会先用maolloc()配置与参数s 字符串相同的空间大小,然后将参数s 字符串的内容复制到该内存地址,然后把该地址返回。该地址最后可以利用free()来释放。返回值:返回一字符串指针,该指针指向复制后的新字符串地址。若返回NULL 表示内存不足。

2014-04-11 20:36:30 1925

转载 strtol,strtoll,strtoul, strtoull字符串转化成数字

名字:strtol, strtoll, strtoul, strtoullconvert a string to a (signed, unsigned ) long integer string声明:#include ( 这个是C标准库,与linux无关。这套函数是通用的。)long int strtol(const char *nptr, char **

2014-04-11 17:01:15 25031

转载 linux选项解释-getopt和getopt_long函数

1、命令行简介2、

2014-04-08 16:07:22 1012

原创 保持通过samba服务器修改文件的权限不变动

通过Samba服务器实现windows和Linux之间的文件共享,相信是绝大多数人的选择。通常我们都会使用Samba的缺省配置,这样,每次通过Samba从Windows向Linux中拷贝文件时,文件都会被加上”可执行”的属性。或者修改文件的时候,文件会被加上“可执行”属性。这是很让人头疼的问题,每次都要通过chmod去修改文件的权限很是麻烦。今天仔细看了一下Samba的手册,发现只要把/etc

2013-06-28 10:51:44 7083 7

转载 设置Samba服务器中新建文件/目录的权限

通过Samba服务器实现windows和Linux之间的文件共享,相信是绝大多数人的选择。通常我们都会使用Samba的缺省配置,这样,每次通过Samba从Windows向Linux中拷贝文件时,文件都会被加上”可执行”的属性。这是很让人头疼的问题,每次都要通过chmod去修改文件的权限很是麻烦。今天仔细看了一下Samba的手册,发现只要把下面的配置加入/etc/samba/smb.conf就可

2013-06-05 09:56:04 14397 2

原创 Linux设备驱动程序第三版之块设备驱动程序

本篇分析Linux设备驱动程序第三版的第十六章,块设备驱动程序的代码,主要是其sbull模块在内核2.6.35.6-45版本下编译有错,这篇文章就是讲sbull模块迁移到了2.6.35.6-45这个模块下了,实现了正确编译,加载。修改之后的代码如下所示,相关函数的功能也在代码中进行说明了。#include #include #include #include #include

2013-03-27 20:30:00 1319

原创 Linux块设备驱动实例

在上一篇文章中详细讲解了块设备驱动的相关知识,并有一些参考代码,但是由于linux系统版本的原因,在2.6.35.6版本中,编译有错误,故在这篇文章中,我们贴出了2.6.35.6版本下的块设备驱动的一个简单例子,代码如下所示。#include #include #include #include #include #include #include #include #in

2013-03-26 21:03:05 1279

转载 Linux块设备驱动

一、块设备驱动之概念和框架1.基本概念块设备(blockdevice)--- 是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区。字符设备(Character device)---是一个顺序的数据流设备,对这种设备的读写是按字符进行的,而且这些字符是连续地

2013-03-26 19:05:41 4392

原创 Linux内存映射——mmap(续)

在上一篇文章详细介绍了Linux内存映射之mmap之后,这篇文章主要描述mmap的具体实现,我的编译环境是2.6.35.6内核版本。在我的例子中,分别采用了remap_pfn_range与nopage两种建立内存映射方式。内核驱动程序:#include #include #include #include /* printk() */#include /* kmall

2013-03-23 17:09:52 2169

原创 Linux内存映射——mmap

一 mmap系统调用1.内存映射所谓的内存映射就是把物理内存映射到进程的地址空间之内,这些应用程序就可以直接使用输入输出的地址空间,从而提高读写的效率。Linux提供了mmap()函数,用来映射物理内存。在驱动程序中,应用程序以设备文件为对象,调用mmap()函数,内核进行内存映射的准备工作,生成vm_area_struct结构体,然后调用设备驱动程序中定义的mmap函数。2.

2013-03-23 17:00:10 25432 3

原创 netlink通信——用户态与内核态通信具体实现

这篇文章主要讲解通过netlink通信机制,具体实现用户态与内核态的数据传送。我们的内核环境是2.6.35.6版本。在文件里包含了Netlink协议簇已经定义好的一些预定义协议:#define NETLINK_ROUTE 0 /* Routing/device hook */#define NETLINK_

2013-03-22 14:43:21 2199

转载 Linux Netlink通信机制详解

Netlink 是一种特殊的 socket,它是 Linux 所特有的,由于传送的消息是暂存在socket接收缓存中,并不被接收者立即处理,所以netlink是一种异步通信机制。 系统调用和ioctl 则是同步通信机制。用户空间进程可以通过标准socket API来实现消息的发送、接收,在Linux中,有很多用户空间和内核空间的交互都是通过Netlink机制完成的,在Linux3.0的内核版本

2013-03-22 14:33:27 2396

原创 将多个设备合并为一个内核模块

这篇文章主要解决如何将之前介绍的三个字符设备驱动程序合并为一个内核模块,即将null字符设备驱动程序、zero字符设备驱动程序、4k大小的临时存储空间的字符设备驱动程序合并为一个内核模块,能够加载到内核模块中,具体实现过程如下所示:将之前提到的三个驱动程序放在同一个目录下,即mydev_null.c、mydev_zero.c、mydev_temp.c和mydev_temp.h文件放在某个文件夹

2013-03-04 16:30:37 1730

原创 实现4K大小的临时存储空间的字符设备驱动

这篇文章介绍如何实现一个简单的linux字符设备驱动,在这里实现的字符设备驱动包括mydev_temp.h文件和mydev_temp.c文件,其中mydev_temp.h文件内容如下:#ifndef _MYDEV_TEMP_H_#define _MYDEV_TEMP_H_#ifndef MEMDEV_MAJOR#define MEMDEV_MAJOR 250#endif#ifnd

2013-03-04 15:31:57 880

原创 实现/dev/zero字符设备驱动

在类UNIX 操作系统中, /dev/zero 是一个特殊的文件,当你读它的时候,它会提供无限的空字符(NULL, ASCII NUL, 0x00),即获取的是一串二进制0。其中的一个典型用法是用它提供的字符流来覆盖信息,另一个常见用法是产生一个特定大小的空白文件。具体驱动实现如下#include #include #include #include #include #ifde

2013-03-04 15:15:40 1106

原创 实现/dev/null的字符设备驱动

/dev/null是个黑洞设备,它丢弃一切写入其中的数据,空设备通常被用于丢弃不需要的输出流。任何写入该设备数据都会被丢弃掉。从这个里面读取数据返回空(也有人认为是读该空设备,直接读到文件尾,那就是返回-1)。将一些不用内容经常发送给这个设备,丢弃不需要的数据。代码实现如下:#include #include #include #include #include #ifdef CON

2013-03-04 15:05:13 2838

原创 samba服务器配置

Samba是一种自由软件包,用来让Unix系统的操作系统与微软Windows操作系统的SMB/CIFS(Server Message Block/Common Internet File System)网络协定做连接。和windows上的网上邻居原理是一样的。通过SMB协议可以实现资源共享及打印机共享。Samba是Windows与Unix系统OS(Operating System的缩写,操作系统:

2013-01-21 20:51:04 924

原创 安装VMware tools共享找不到gcc库文件

在安装VMware  tools共享的过程中,遇到的问题,给出的报错信息显示,大概是说找不到gcc库文件,我手动输入这个库文件,它也提示无效,但是我们已经安装了gcc,并且可以查看到gcc库文件。其实问题出在这个vmware-config-tools.pl文件上。我们来看看这个文件,用vim打开这个文件,查找“directoryof C header files”,我们在4985行的位置找到了

2013-01-21 20:09:03 9295

转载 VMware中如何实现Linux系统与宿主机文件共享

参考:http://hi.baidu.com/fly_2009hui/blog/item/a62b484f0f4ac63baec3ab73.html使用hgfs实现vmare文件传输一法使用vmware(vmware workstation 5)下shared folders功能实现vmware中host与ghost间文件传输,无需任何网络相关设置,不使用任何网络协议,host和gho

2013-01-21 19:54:12 827

转载 VMWare网络设置的3中方式

一 VMware网络设置的三种方式1 Host-only连接方式  让虚机具有与宿主机不同的各自独立IP地址,但与宿主机位于不同网段,同时为宿主主机新增一个IP地址,且保证该IP地址与各虚机IP地址位于同一网段。最终结果是新建了一个由所有虚机与宿主主机所构成的局域网,但该局域网与宿主主机本身所处的现有局域网是相互独立的,如果不做额外路由设置,这两个局域网之间不会连通,因此新建的局域网可

2013-01-21 19:36:11 454

转载 Shell脚本根据设备名自动获取设备号

写驱动的时候如果使用自动分配设备号的方式,在创建设备结点的时候需要在 '/proc/devices' 文件中查看一下所分配的设备号。可以通过awk命令:awk '{if($2=="your-driver") {print $1}}' /proc/devicesmknod.sh这个脚本能够自动获取设备号并创建设备节点:#!/bin/bashdriver=$1d

2013-01-21 19:23:44 2690

原创 字符设备的注册

在linux内核2.6版本以前,注册一个字符设备的的经典方法是使用register_chrdev,相应的从设备中注销字符设备的方法是unregister_chrdev,而在2.6版本以后,字符设备函数的注册与注销使用的是如下一套方法:#include struct cdev *cdev_alloc(void);//分配一个独立的cdev结构 void cdev_init(struct

2013-01-21 19:21:44 979

转载 字符设备 register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev()函数的区别

内核中所有已分配的字符设备编号都记录在一个名为 chrdevs 散列表里。该散列表中的每一个元素是一个 char_device_struct 结构,它的定义如下:   static struct char_device_struct {       struct char_device_struct *next;    // 指向散列冲突链表中的下一个元素的指针       uns

2013-01-21 19:07:00 581

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除