UNIX文件I/O】的更多相关文章

一.概述 Unix文件操作常用函数包括open.close.creat.lseek.dup.dup2.fcntl等, 其中open.creat. fcntl函数需要包含头文件<fcntl.h>, 其余几个函数需要包含头文件<unistd.h>. 由于在Linux操作系统 中使用man命令可以非常方便的查找函数原型及示例,这里就不帖出函数原型了,只讲一下使用时需要注意的地方. 二.文件描述符 每一个在程序中打开的文件都有一个相应的文件描述符(file descriptor),Unix…
用stat函数可以获取一个文件的状态信息,原型是这样的: int stat(const char *path, struct stat *buf); 其中结构体stat的结构: struct stat { dev_t st_dev; /* ID of device containing file */ ino_t st_ino; /* inode number */ mode_t st_mode; /* protection */ nlink_t st_nlink; /* number of h…
1. fopen函数 #include <stdio.h> FILE *fopen(const char *path, const char *mode) 返回:文件顺利打开后,指向该流的文件就会被返回.如何文件打开失败则返回NULL,并把错误代码存在 errno 中. 参数说明: mode: 1)r        以只读方式打开文件,该文件必须存在.     2) r+     以可读写方式打开文件,该文件必须存在.    3) rb+   以读写打开一个二进制文件,允许读写数据,文件必须存…
一.UNIX下关于文件权限的表示方法和解析 SUID 是 Set User ID, SGID 是 Set Group ID的意思. UNIX下可以用ls -l 命令来看到文件的权限.用ls命令所得到的表示法的格式是类似这样的:-rwxr-xr-x .下面解析一下格式所表示的意思.这种表示方法一共有十位: 9 8 7 6 5 4 3 2 1 0 - r w x r - x r - x 第9位表示文件类型,可以为p.d.l.s.c.b和-: p表示命名管道文件 d表示目录文件 l表示符号连接文件 -…
简介 Unix系统大多数文件i/o只需要:open.read.write.lseek.close这几个函数.但是某些时候我们也需要fcntl.ioctl.sync等函数配合使用.这些函数都是不带缓冲区的I/0(unbuffered I/O),术语不带缓冲的指的是每个read和write都是内核 中的一个系统调用.这些函数都是POSIX和single UNIX Specification的组成部分. 这样说可能有点迷糊,举个例子说明 不带缓存的I/O:       read,write,open.…
最近把公司从SVN切到GIT下,因为大多同事在Windows下开发,又碰到换行符问题,找到一个批量转换方法 打开UE->在文件中替换,把^p替换成^n,然后设置好要替换的文件和路径,就开始替换吧.…
对于经常在windows环境下和linux环境同时使用的文件(如在windows系统下编写,在linux环境下编译的文件), 常常存在这样的问题:由于两种系统的格式文件格式不同,导致程序出现不期望的问题,这时我们可以使用格式转换命令 dos2unix/unix2dos对文件进行格式转换. 但是,如果我们处理的是成百上千的文件,那么针对每个文件使用上面的命令将耗费相当大的经历,如何提高工作效率呢?可以使用批量处理的方法,根据文件类型找出所有的文件并进行转码,如下: find -type f | x…
第一次用markdown语法写博客,写出来的还比较整齐,感觉博客园对序号的支持不是很好,调了一会才有了比较满意的效果,还有有哪位知道使用markdown如何插入frame? 这边博客主要说了APUE中文件I/O的主要知识点,并且尝试写了一些代码,都列在了博客中. 3.1 文件描述符 对于内核而言,所有打开的文件都通过文件描述符引用.文件描述符是一个非负整数.当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符.当读,写一个文件时,使用open或者creat返回的文件描述符标识该文件…
lseek函数显示地为一个打开文件设置偏移量,文件偏移量可以大于文件的当前长度,在这种情况下,对该文件的下一次写将加长该文件,并在文件中构成一个空洞,这一点是允许的.位于文件中但没有写过的字节都被读为0. eg: holeFile.c函数创建了一个具有空洞的文件,运行观察: 可以看到,文件中的30个未写入字节都被设置读为0.每一行开始的一个7位数是以八进制形式表示的字节偏移量. 将刚创建的文件与同样长度但舞空洞的文件进行比较 虽然两个文件的长度相同,但无空洞文件占用了20个磁盘块,而具有空洞的文…
打开文件.新建文件和关闭文件操作 打开文件操作使用系统调用函数open(),该函数的作用是建立一个文件描述符,其他的函数可以通过文件描述符对指定文件进行读取与写入的操作.打开文件的一般形式是: open(文件路径, 标志);  函数的返回值是文件描述符,如果打开文件成功返回一个正整数,否则返回-1.标志是用于指定打开文件操作模式的枚举常量,主标志如表13.1所示. 表13.1  打开文件操作的主标志 参    数 说    明 参    数 说    明 O_RDONLY 以只读方式打开文件 O…
pwd:查看当前文件夹 cd: 打开文件夹 ls:列出当前路径下所有文件 ls -l :列出当前路径下的所有文件详细信息. mkdir: 新建文件夹 touch: 创建文件   eg: touch text.txt open:打开一个文件 eg:opent text.txt…
lseek函数显示地为一个打开文件设置偏移量,文件偏移量能够大于文件的当前长度,在这样的情况下.对该文件的下一次写将加长该文件.并在文件里构成一个空洞,这一点是同意的. 位于文件里但没有写过的字节都被读为0. eg: holeFile.c函数创建了一个具有空洞的文件,执行观察: 能够看到,文件里的30个未写入字节都被设置读为0.每一行開始的一个7位数是以八进制形式表示的字节偏移量. 将刚创建的文件与相同长度但舞空洞的文件进行比較 尽管两个文件的长度同样,但无空洞文件占用了20个磁盘块,而具有空洞…
大多数unix文件I/O操作只需要用到5个函数:open.read.write.lseek和close.此处所说明的函数均为不带缓存的I/O操作(下同).不带缓存指的是每个read和write都调用内核的一个系统调用.这些不带缓存的函数并不是ANSI C的组成部分,但是是POSIX.1和XPG3的组成部分. 文件描述符(File Descriptors) 对内科而言,所有打开的文件都由fd引用.fd是一个非负整数.当打开一个已存在的文件或创建一个新文件时,内核向进程返回一个fd.当读/写一个文件…
转:DOS文件转换成UNIX文件格式详解 由windows平台迁移到unix系统下容易引发的问题:Linux执行脚本却提示No such file or directory dos格式文件传输到unix系统时,会在每行的结尾多一个^M,当然也有可能看不到,但是在vi的时候,会在下面显示此文件的格式,比如 "dos.txt" [dos] 120L, 2532C 字样,表示是一个[dos]格式文件,如果是MAC系统的,会显示[MAC],因为文件格式的原因有时会导致我们的unix程序,或者s…
 1 File Times 每个文件会维护三个时间字段,每个字段代表的时间都不同.如下表所示: 字段说明: st_mtim(the modification time)记录了文件内容最后一次被修改的时间. st_ctim(the changed-status time)记录了文件的i-node最后一次被修改的时间,如修改文件权限位,修改文件所有者ID,修改关联到该文件的link数目. i-node中的信息和文件的实际内容是分离的,所以当更新i-node时,需要更新的时st_ctim(the ch…
dos格式文件传输到unix系统时,会在每行的结尾多一个^M(/r),当然也有可能看不到.但是在vim的时候,会在下面显示此文件的格式,比如 "dos.txt" [dos] 120L, 2532C 字样,表示是一个[dos]格式文件,如果是MAC系统的,会显示[MAC].因为文件格式的原因有时会导致我们的unix程序,或者shell程序出现错误,那么需要把这些dos文件格式转换成unix格式,方法是 vim dos.txt:set fileformat=unix:w 删除^M的方法: …
UNIX 操作系统的设计.用户界面.文化和演变都是建立在它的一套统一的想法和概念上.其中最重要的一点可能是“一切皆文件”,而这个概念被认为是 UNIX 的灵魂之一. 这一关键设计原则提供了一个统一的范式,用于访问各种输入输出资源:文档.目录.磁盘驱动器.CD-ROM.调制解调器.键盘.打印机.显示器.终端,甚至是一些进程间通信和网络通信.所有这些资源拥有一个通用的抽象,UNIX 之父将其称为“文件”.因为每个“文件”都通过相同的 API 暴露出来,所以你可以使用同一组基本命令来读取和写入磁盘.键…
原文地址:In UNIX Everything is a File 原文作者:ph7spot.com 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m… 译者:pmwangyang 为了有计划的发展架构设计.界面.文化和开发路线,UNIX 系统明确了一系列统一的概念和创想.这几点里面最重要的一点莫过于一句咒语:「一切皆文件」,被广泛认为是 UNIX 的定义之一. 最主要的设计原则是提供一个访问大范围输入/输出资源(包括文件.文件夹.硬盘.CD-ROM.调制解调器…
作者: 阮一峰 Unix(包含Linux)的初学者,常常会很困惑,不明白目录结构的含义何在. 举例来说,根目录下面有一个子目录/bin,用于存放二进制程序.但是,/usr子目录下面还有/usr/bin,以及/usr/local/bin,也用于存放二进制程序:某些系统甚至还有/opt/bin.它们有何区别? 长久以来,我也感到很费解,不明白为什么这样设计.像大多数人一样,我只是根据<Unix文件系统结构标准>(Filesystem Hierarchy Standard),死记硬背不同目录的区别.…
原文:http://www.ruanyifeng.com/blog/2012/02/a_history_of_unix_directory_structure.html Unix(包含Linux)的初学者,常常会很困惑,不明白目录结构的含义何在. 举例来说,根目录下面有一个子目录/bin,用于存放二进制程序.但是,/usr子目录下面还有/usr/bin,以及/usr/local/bin,也用于存放二进制程序:某些系统甚至还有/opt/bin.它们有何区别? 长久以来,我也感到很费解,不明白为什么…
Linux或Unix文件,和windows文件,在来回处理时,如果不注意 换行符的区别,可能导致程序错误!!!深刻的教训.... 在早期的打印机时代,开始新的一行要占用两个字符的时间.如果到了一行的结尾处,你要快速回到新的一行的开头,需要打印针头在纸面上飞快地掠过,常常会在纸面上留下污点.解决这个问题的办法就是,用两个字符:一个字符<Return>来移到第一列,另一个字符<Line feed>来新增一行.计算机产生以后,存储较为昂贵,在如何解决回车换行这个老问题上,人们产生了不同的…
Unix(包含Linux)的初学者,常常会很困惑,不明白目录结构的含义何在.Unix 目录结构的来历举例来说,根目录下面有一个子目录/bin,用于存放二进制程序.但是,/usr子目录下面还有/usr/bin,以及/usr/local/bin,也用于存放二进制程序:某些系统甚至还有/opt/bin.它们有何区别?长久以来,我也感到很费解,不明白为什么这样设计.像大多数人一样,我只是根据<Unix文件系统结构标准>(Filesystem Hierarchy Standard),死记硬背不同目录的区…
文件描述符 在内核中,所有打开的文件都使用文件描述符(一个非负整数)标记.文件描述符的变化范围是0~OPEN_MAX – 1.早期的unix系统中,每个进程最多可以同时打开20个文件,就是说文件描述符的范围为0~19,但是现在很多系统将其增加到0~63. #include <fcntl.h> int open(const char* path, int oflag, ...); int openat(int fd, const char* path, int oflag, ...); 返回值:…
  1.Linux文件空洞与稀疏文件 2.文件系统数据存储 3.文件系统调试   文件空洞   在UNIX文件操作中,文件位移量可以大于文件的当前长度在这种情况下,对该文件的下一次写将延长该文件,并在文件中构成一个空洞.位于文件中但没有写过的字节都被设为 0. 如果 offset 比文件的当前长度更大,下一个写操作就会把文件“撑大(extend)”在文件里创造“空洞(hole)”.没有被实际写入文件的所有字节由重复的 0 表示.空洞是否占用硬盘空间是由文件系统(file system)决定的 稀…
最近阅读UULP(Understanding Unix/Linux Programming),按照书中介绍对Unix/Linux系统编程进行学习梳理,总结如下. 1. who命令能做什么 who命令用于查看有谁在使用系统. 执行who命令. who 其输出格式如下: ustc   tty7    Sept  1   08:34  (xxx.yy.com用户登陆地址,有些版本没有) john   lft/0   Sept  1   08:34  其显示包含用户名,终端名,和登录时间. 2. who…
作为一名Oracle DBA,在所难免要接触Unix,但是Unix本身又是极其复杂的,想要深刻掌握同样很不容易.那么到底我们该怎么入手呢?Donald K Burleson 的<Unix for Oracle DBAs Pocket Reference>这本书就比较详细的说明了作为一名Oracle DBA所应该掌握的知识,而且基本上都有例子供实验,因此有选择的翻译出主要的章节:3 构建Unix命令4 Unix服务器环境5 进程管理6 Server Values7 内存和CPU管理10 服务器监…
在 Linux 中最基本的任务之一就是设置文件权限.理解它们是如何实现的是你进入 Linux 世界的第一步.如您所料,这一基本操作在类 UNIX 操作系统中大同小异.实际上,Linux 文件权限系统就直接取自于 UNIX 文件权限(甚至使用许多相同的工具). 但不要以为理解文件权限需要长时间的学习.事实上会很简单,让我们一起来看看你需要了解哪些内容以及如何使用它们. 基础概念 你要明白的第一件事是文件权限可以用来干什么.当你设置一个分组的权限时发生了什么?让我们将其展开来说,这个概念就真的简单多…
在Unix/Linux下可以使用file命令查看文件类型,如下: file dosfile.txt 使用dos2unix 一般Linux发行版中都带有这个小工具,只能把DOS转换为UNIX文件,命令如下: dos2unix dosfile.txt 安装dos2unix yum -y install dos2unix 使用tr 使用tr命令拷贝标准输入到标准输出,替换或者删除掉选择的字符,只能把DOS转换为UNIX文件,命令如下: tr -d '\r' < dosfile.txt > unixf…
从这周开始逐渐的进入学习状态,每天晚上都会坚持写c程序,并且伴随对这本书的深入,希望能写出更高质量的读书笔记和程序. 本书的第一章,介绍了一些关于unix的基础知识,在这里我不想去讨论linux到底是不是unix或者和unix的关系是什么这样的问题,只针对对自己有价值的知识点进行分析. 第一节 登录 第一节中,作者叙述了unix下用户登录的基本过程,包括保存用户口令的文件 /etc/passwd , 以及该文件的格式,该口令文件中的登录项的组成结构为由7个冒号分隔的字符串,依次是 : 登录名 加…
Unix文件的类型1.普通文件2.目录3.符号链接4.面向块的设备文件5.面向字符的设备文件6.管道和命名管道7.套接字 点评:不明觉厉 打开文件进程只能访问“打开的”文件.为了打开一个文件,进程调用fd = open(path,flag,mode)path表示被打开的文件的路径.flag表示打开的方式,它也指定是否应当创建一个不存在的文件.mode指定新创建文件的访问权限. 关闭文件当进程无需再访问文件的内容时,就调用系统调用:res = close(fd) 更名及删除文件要重新命名或删除一个…