Understanding Unix/Linux Programming-文件、设备和流

每个设备文件都支持系统调用 ioctl:

  • 目标:控制一个设备
  • 头文件:#include<sys/ioctl.h>
  • 函数原型:int result = ioctl(int fd , int operation [,arg...]);
  • 参数
    • fd : 文件所关联的文件描述符
    • operation:操作类型
    • arg:可选参数
    • result:-1即错误;0即正确;

  实际上,任何数据的源或者目的地都被Unix视为文件来处理,基本的系统调用既支持磁盘文件,也适用于设备文件。它们的区别体现在对于连接的操作上。磁盘文件的文件描述符包含对缓冲属性和扩展属性的定义代码;而终端的文件描述符包含编辑、回显、字符转换和其他操作的定义代码。

  可以吧每个处理步骤看作是连接的属性,也可以把连接看作是处理步骤的组合。

  基础的数据流模型的一个重要特征是处理的模块化,如果不满意仅能支持像大小写转换这样的终端驱动程序,可以设计安装一个可将数字转换为罗马数字的模块,不过我就不编了哈(逃)。

  另外,Unix/Linux编程实践看了150页左右,虽然只是跟着书编写了书中现有的代码,没有多做练习,但是还是觉得对与系统的了解加深了不少啊,过完这本书再去肯操作系统,哈哈哈,不知道顺序有没有弄反。

时间: 2025-01-18 12:31:03

Understanding Unix/Linux Programming-文件、设备和流的相关文章

Understanding Unix/Linux Programming-who指令练习

1 /*Apply a Buffer trick in who3.c*/ 2 3 #include <stdio.h> 4 #include <stdlib.h> 5 #include <utmp.h> 6 #include <fcntl.h> 7 #include <unistd.h> 8 #include <time.h> 9 10 #define NRECS 16 11 #define NULLUT ((struct utmp

Understanding Unix/Linux Programming-stty指令练习

先来看一个简单的练习程序: 1 #include <stdio.h> 2 3 int main() 4 { 5 int c , n = 0 ; 6 while( (c = getchar() ) != 'Q' ) 7 printf("char %3d is %ccode %d\n" , n++ , c , c ); 8 return 0 ; 9 } 以上是程序编译后运行的效果啦,可以看到在输入hello之后敲击回车后才运行了该程序,也就是说,在终端中输入的字符实际上是被缓冲

Unix/Linux文件类型及访问权限

在Linux系统中,有7种文件类型. 普通文件 (regular file) 目录文件 (directory) 链接文件 (symbolic link) 管道文件 (FIFO) 套接字文件 (socket) 字符设备文件 (character device) 块设备文件    (block device) 在Solaris上,还有一种文件类型, 叫做door文件. 而一个文件的Unix访问权限,包括12位,通常用4个8进制位表示, 标志 八进制值 含义 S_ISUID 04000 set use

Unix/Linux环境C编程入门教程(41) C语言库函数的文件操作详解

?? 上一篇博客我们讲解了如何使用Linux提供的文件操作函数,本文主要讲解使用C语言提供的文件操作的库函数. 1.函数介绍 fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path,const char * mode); 函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态. mode有下列几种形态字符串: r 打开只读文件,该文件必须存

Unix/Linux环境C编程入门教程(40) 初识文件操作

?? 1.函数介绍 close(关闭文件) 相关函数 open,fcntl,shutdown,unlink,fclose 表头文件 #include<unistd.h> 定义函数 int close(int fd); 函数说明 当使用完文件后若已不再需要则可使用close()关闭该文件,二close()会让数据写回磁盘,并释放该文件所占用的资源.参数fd为先前由open()或creat()所返回的文件描述词. 返回值 若文件顺利关闭则返回0,发生错误时返回-1. 错误代码 EBADF 参数fd

Linux创建特殊设备文件

linux下的设备很特别,系统总是以总一的方式读取设备,而设备间的差别由设备驱动程序来负责完成.正因为如此,设备管理起来非常地容易.linux也提供了虚设备文件,即无实际物理硬件相对应的设备,它们在实际的工作学习中会经常用到,现介绍如下 (一)-首先说的当然是回环设备,loop device,这是什么呢?就是把文件模拟成设备,然后就可以像实际设备那样进行相关的操作啦,是大家所熟悉的就是挂载光盘镜象啦,比如说挂载CentOS-5.2-i386-bin-DVD.iso 这个,那么在SHELL中输入

系统调用操作文件——《Unix/Linux编程实践教程》读书笔记

1.who命令通过读系统日志的内容显示当前已经登录的用户. 2.Unix系统把数据存放在文件中,可以通过以下系统调用操作文件: open(filename, how) creat(filename, mode) read(fd, buffer, amt) write(fd, buffer, amt) lseek(fd, distance, base) close(fd) 3.进程对文件的读/写都要通过文件描述符,文件描述符表示文件和进程之间的连接. 4.每次系统调用都会导致用户模式和内核模式的切

【翻译自mos文章】在unix/linux中使用文件描述符(File Descriptors)来找回被删掉的文件(数据文件or redo log)

在unix/linux中使用文件描述符(File Descriptors)来找回被删掉的文件(数据文件or redo log) 参考原文: Retrieve deleted files on Unix / Linux using File Descriptors (Doc ID 444749.1) 适用于: Oracle Database - Enterprise Edition - Version 8.1.7.0 to 11.2.0.3 [Release 8.1.7 to 11.2] Linu

Linux/Unix下pid文件的作用

主要有三点: (1) pid文件的内容:pid文件为文本文件,内容只有一行, 记录了该进程的ID. 用cat命令可以看到. (2) pid文件的作用:防止进程启动多个副本.只有获得pid文件(固定路径固定文件名)写入权限(F_WRLCK)的进程才能正常启动并把自身的PID写入该文件中.其它同一个程序的多余进程则自动退出. (3) 编程技巧: 调用fcntl设置pid文件的锁定F_SETLK状态,其中锁定的标志位F_WRLCK. 如果成功锁定,则写入进程当前PID,进程继续往下执行. 如果锁定不成