mknod命令及低级文件操作函数



mknod命令
 
  功能: 用于建立特殊文件
 
  原型: #mknod [options] 设备文件名{bcu} 主设备号 次设备号
  www.2cto.com  
  选项 [-m mode] [--mode=mode] [--help] [--version]
 
  选项: -m,--mode mode 指定生成文件模式的选项。作为mode的包括chmod中使用的记号或数字形式
 
          --help 显示帮助内容
 
          --version 显示版本信息
 
  说明: mknod命令用于建立FIFO、字符设备文件及块设备文件等。建立文件模式初值为0666。写入设备文件名后,指定该文件的特殊状态值。
       在这里能够使用下列设置:
 
    p FIFO文件
 
    b 块设备文件
 
    c或U 文件设备文件
 
  建立块或字符特殊文件时,必须指定该设备文件的主设备号和次设备号。
 
  ----------------------------------------------------------------------------------------  www.2cto.com  
  open()函数
 
  功能: 打开设备文件
 
  原型: #include <sys/types.h>
 
    #include <sys/stat.h>
 
    #include <fcntl.h>
 
    int open(const char *pathname, int flag);
 
  说明: 利用flags指定的属性打开表示pathname上指定字符的设备文件。通常,pathname上指定的位置为"/dev/"目录中的设备文件。
 
  变量: pathname 指定设备文件字符的地址
 
    flags 指定接近设备文件的属性:
 
    _O_RDONLY 以只读方式打开文件
 
    _O_WRONLY 以只写方式打开文件
 
    _O_RDWR 以可读可写方式打开文件
 
    _O_NOCTY 如果欲打开的文件为终端机设备时,则不会将该终端机当成进程控制终端机
 
    _O_NONBLOCK 以不可阻断的方式打开文件,也就是无论有无数据读取或等待,都会立即返回进程之中
 
    _O_NDELAY 以不可阻断的方式打开文件
 
    _O_SYNC 以同步的方式打开文件,设备上写入的内容记录到硬件之前,呼叫进程处于阻断状态  www.2cto.com  
 
  返回值: 若成功打开文件,则返回文件描述符,失败则返回-1值。若所有欲核查的权限都通过了检查则
 
    返回0值,表示成功,只要有一个权限被禁止则返回-1。得到-1值时参考errno,可以确定实际设备驱动程序中返回的值。
 
  错误代码:
 
    -ENXIO 文件为设备文件,但是没有相应的设备
 
    -ENODEV 不存在设备文件相关的设备驱动程序或硬件
 
    -ENOMEM 核心内存不足
 
  -------------------------------------------------------------------------------------------
 
  close()函数
 
  功能: 关闭设备文件
 
  原型: #include <unistd.h>
 
    int close(int fd);
 
  说明: 为了打开设备文件,关闭open()函数返回的文件描述符fd相应的设备文件。
 
  变量: fd open()函数运行结果返回的文件描述符
 
  返回值: 成功关闭则返回0,失败则返回-1。
 
  --------------------------------------------------------------------------------------------
 
  read()函数
 
  功能: 由设备文件读取数据
 
  原型: #include <unistd.h>
 
    ssize_t read(int fd, void *buf, size_t count);
 
  说明: read()函数会把参数fd所指向的设备文件传送count个字节到buf指针所指的内存中。此时count  www.2cto.com  
 
    值应小于SSIZE_MAX。open()函数没有指定为O_NONBLOCK或O_NDELAY时,阻断到可读取相应计数
 
    值的大小。设备文件的设备驱动程序没有体现O_NONBLOCK或O_NDELAY时,没有指定相应的选项
 
    也有可能被阻断。原则上这是错误的设备驱动程序。创建程序时,也要对比上述情况,因此必
 
    须确认返回的结果。此外文件读写位置会随读取大的字节移动。
 
  变量: fd 由open()函数运行结果返回的描述符
 
    buf 存储读取数据的空间位置。该存储空间应大于计数字节
 
    count 设备文件中读取的数据大小。该值应小于SSIZE_MAX。返回值为0,立即终止运行
 
  返回值: 设备文件正常读取里数据后,返回读取的字节数。即使该值小于相应的字节数,也不是错误。几
  www.2cto.com  
    乎没有实际可用的字节数或被中断信号时发生上述现象。如果失败则返回-1,得到-1值时参考errno
 
    ,可以确认实际设备驱动程序中的返回值。
 
  错误代码:
 
    -EINTR 此调用被信号所中断
 
    -EAGAIN 当使用不可阻断(O_NONBLOCK)打开文件后,read呼叫无可读取的数据
 
    -EIO 设备文件读取数据是发生输入输出错误
 
    -EBADF 参数fd非有效文件描述符,或该文件已关闭
 
    -EINVAL fd连接到不合适读取的对象上
 
    -EFAULT 参数buf为无效指针,指向无法存在的空间
 
  -------------------------------------------------------------------------------------------
 
  write()函数
 
  功能: 将数据写入设备文件内
  www.2cto.com  
  原型: #include <unistd.h>
 
    ssize_t write(int fd, const void* buf, size_t count);
 
    说明: write()函数会把参数buf所指的内存中的count个字节写入到参数fd所指的文件内。此时count
 
    值应小于SSIZE_MAX。open()函数没有指定为O_NONBLOCK或O_NDELAY时,阻断到可读取相应count
 
    值的大小。设备文件的设备驱动程序没有体现O_NONBLOCK或O_NDELAY时,没有指定相应的选项
 
    也有可能被阻断。原则上这是错误的设备驱动程序。创建程序时,也要对比上述情况,因此必
 
    须确认返回的结果。文件指针的位置会随之移动相应的字节数。
 
  变量: fd 由open()函数运行结果返回的描述符
 
    buf 存储写入数据的空间位置。该地址所指的存储空间应大于count字节
 
    count 设备文件中要写入数据的大小。该值应小于SSIZE_MAX。返回值为0则立即中断
 
  返回值: 设备文件正常写入数据后,返回写入的字节数。即使该值小于相应的必要字节数,也不是错误。
 
    可能没有写入实际需要的字节数,或被某种信号中断了。如果失败则返回-1,得到-1值时参考
 
    errno,可以确认实际设备驱动程序中的返回
  www.2cto.com  
  错误代码
 
    -EBADF 参数fd非有效的文件描述符,或该文件没有处于可写状态
 
    -EINVAL fd连接到不适合写入的对象上
 
    -EFAULT 参数buf为无效指针,指向无法存在的空间
 
    -EAGAIN 虽然使用不可阻断(O_NONBLOCK)打开了文件,但是没有处于read呼叫后可直接处理的状态
 
    -EINTR 写完数据前,此调用被信号中断
 
    -ENOSPC 包含fd文件的设备上不存在相应的数据空间
 
    -EIO 设备文件写入数据的过程中发生了输入输出错误
 
  ----------------------------------------------------------------------------------------------
 
  lseek()函数
 
  功能: 移动文件的读写位置
 
  原型: #include <sys/types.h>
 
    #include <unistd.h>
 
    off_t lseek(int fd, off_t offset, int whence);
 
  说明: lseek()函数用来控制该文件的读写位置。把文件描述符fd所指的设备文件向上移到文件指针的位置  www.2cto.com  
 
    把文件指针的位置移到whence所指选项offset值的位置上。文件指针的位置随设备文件所连接设备
 
    驱动程序的处理方式而变化。例如,管理内存的设备文件可以利用内存的位置。但是,多数字符设备
 
    驱动程序不使用该功能。
 
  变量: fd 由open()函数运行结果返回的描述符
 
    offset 以字节为单位,指定被移动文件指针的位置。该值随whence解释为实际移动位置
 
    whence 指定用来解释offset的条件
 
    -SEEK_SET 参数offset即为新的读写位置
 
    -SEEK_CUR 以目前的读写位置往后增加offset个位移量
 
    -SEEK_END 将读写位置指向文件尾后在增加offset个位移量。多数设备为文件的文
 
    件尾定义较为模糊,通常不使用该值
 
  返回值: 当调用成功时则返回目前的读写位置,也就是距离文件开头多少个字节。若有错误则返回(off_t)-1,
 
    errno会存放错误代码。得到了文件指针的正常移动位置后,返回移到的实际位置。如果失败则返回-1。
 
    得到-1值时参考全局变量错误值,可以确定实际设备驱动程序中返回的值
 
  错误代码  www.2cto.com  
 
    -EINVAL whence指定的值不适合
 
  -------------------------------------------------------------------------------------------------
  ioctl()函数
 
  功能: 控制设备文件
 
  原型: #include <sys/ioctl.h>
 
    int ioctl(int fd, int request, ...);
 
  说明: ioctl()函数在文件描述符fd相应的设备文件上实现read()和write()函数难以完成的输入输出处理。该
 
    函数的各个变量中除fd外,其他变量没有标准值。知识指定了几个macro值定义的标准。不同的设备文件
 
    具有表示不同意义的值。ioctl()函数的各个变量时可变的。虽然在语法上能够表现出来,但是最多可容
 
    纳3个。第三个因素表示char *argp;
 
  变量: fd 由open()函数运行结果返回的描述符
 
    request 定义连接设备文件的设备驱动程序应调用的命令。根据宏判断是输入命令还是输出命令,argp
  www.2cto.com  
    指定的值作为存储地址时,以字节为单位显示出传达因子
 
    ... 第三个变量被称作argp,是可省略的变量,与request有关,是处理request命令的辅助信息
 
  返回值: 当调用成功时返回0,失败时-1。得到-1值时参考全局变量错误值,可以确定实际设备驱动程序中返回的值
 
  错误代码
 
    -EFAULT 参数argp无效,指向无法存在的内存空间
 
    -ENOTTY fd与字符设备文件无关
 
    -EINVAL 连接设备文件的设备驱动程序不能处理request或者argp
 
  ----------------------------------------------------------------------------------------------------
  www.2cto.com  
  fsync()函数
 
  功能: 将缓冲区数据写回磁盘
 
  原型: #include <unistd.h>
 
    int fsync(int fd);
 
  说明: fsync()负责将参数fd所指的文件数据由系统缓冲区写回磁盘,以确保数据同步
 
  变量: fd 由open()函数运行结果返回的描述符
 
  返回值: 成功返回0,失败返回-1得到-1值时参考全局变量错误值,可以确定实际设备驱动程序中返回的值。
 
  错误代码
 
    -EROFS,EINVAL 设备文件不支持该函数的处理过程
 
    -EIO 同步过程中发生了错误

相关内容

    暂无相关文章