linux 0.11 内核学习 ioctl.c
/*
* ioctl.c 文件实现了输入/输出控制系统调用ioctl(),该函数
* 主要是调用函数tty_ioctl()对终端的IO进行控制
*/
/*
* linux/fs/ioctl.c
*
* (C) 1991 Linus Torvalds
*/
#include <string.h>
#include <errno.h>
#include <sys/stat.h>
#include <linux/sched.h>
extern int tty_ioctl(int dev, int cmd, int arg);
typedef int (*ioctl_ptr)(int dev,int cmd,int arg);
/* 定义系统中设备种数 */
#define NRDEVS ((sizeof (ioctl_table))/(sizeof (ioctl_ptr)))
/* ioctl 操作函数指针表 */
static ioctl_ptr ioctl_table[]={
NULL, /* nodev */
NULL, /* /dev/mem */
NULL, /* /dev/fd */
NULL, /* /dev/hd */
tty_ioctl, /* /dev/ttyx */
tty_ioctl, /* /dev/tty */
NULL, /* /dev/lp */
NULL}; /* named pipes */
/* 输入输出控制函数 */
int sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg)
{
struct file * filp;
int dev,mode;
// 如果文件描述符超出可打开的文件数,或者对应描述符的文件结构指针为空,则返回出错码
if (fd >= NR_OPEN || !(filp = current->filp[fd]))
return -EBADF;
// 取对应文件的属性
mode=filp->f_inode->i_mode;
// 如果该文件不是字符文件,也不是块设备文件,则返回出错码
if (!S_ISCHR(mode) && !S_ISBLK(mode))
return -EINVAL;
// 从字符或块设备文件的i 节点中取设备号。如果设备号大于系统现有的设备数,则返回出错号
dev = filp->f_inode->i_zone[0];
if (MAJOR(dev) >= NRDEVS)
return -ENODEV;
// 如果该设备在ioctl 函数指针表中没有对应函数
if (!ioctl_table[MAJOR(dev)])
return -ENOTTY;
// 否则返回实际ioctl 函数返回码
return ioctl_table[MAJOR(dev)](dev,cmd,arg);
}
参考《linux内核完全注释》和网上相关文章
相关文档:
打包: tar [-j] | [-z] [cv] [-f tar包文件] 要打入包的源文件
解包: tar [-j] | [-z] [xv] [-f tar包文件] [-C 指定解包的目录]
查看: tar [-j] | [-z] [tv] [-f tar包文件]
常用的打包选项:
选项
描述
-c
建立tar包文件
-t
查看tar包文件中的文件列表
-x
解开tar包文件
-C path
与解包选项(-x)配合使用,指定 ......
linux和unix下常用解压和压缩命令
.tar
解包: tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)
---------------------------------------------
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz
解压:tar zxvf FileName.ta ......
http://www.ej38.com/showinfo/linux-111338.html
1. HCI层协议概述:
HCI提供一套统一的方法来访问Bluetooth底层。如图所示:
从图上可以看出,Host
Controller Interface(HCI) 就是用来沟通Host和Module。Host通常就是PC,
Module则是以各种物理连接形式(USB,serial,pc-card等)连接到PC上的bluetooth D ......
最新liux下tomcat5.5.25+mysql5.0.45+jdk1.0.5.13+eclipse3.3.1+myeclipse6.0配置
一、安装所需软件包:
1.JDK 5.0 Update 13(jdk-1_5_0_13-linux-i586-rpm.bin)
下载地址:
http://sdlc-esd.sun.com/ESD36/JSCDL/jdk/1.5.0_13/jdk-1_5_0_13-linux ......