1 . 创建
int creat(const char *filename, mode_t mode);
参数 mode 指定新建文件的存取权限,它同 umask 一起决定文件的最终权限( mode&umask),
其中 umask 代表了文件在创建时需要去掉的一些存取权限。 umask 可通过系统调用 umask()来改变:
int umask(int newmask);
该调用将 umask 设置为 newmask,然后返回旧的 umask,它只影响读、写和执行权限。
2. 打开
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
open()函数有两个形式,其中 pathname 是我们要打开的文件名 ( 包含路径名称,缺省是认为
在当前路径下面), flags 可以是如下 所示的一个值或者是几个值的组合。

文件打开标志

标 志 含 义

O_RDONLY

以只写的方式打开文件

O_WRONLY

以只读的方式打开文件

O_RDWR

以读写的方式打开文件

O_APPEND

以追加的方式打开文件

O_EXEC

如果使用了 O_CREAT 而且文件已经存在,就会发生一个错误

O_CREAT

创建一个文件

O_NOBLOCK

以非阻塞的方式打开一个文件

O_TRUNC

如果文件已经存在,则删除文件的内容

O_RDONLY、 O_WRONLY、 O_RDWR 三个标志只能使用任意的一个。
如果使用了 O_CREATE 标志,则使用的函数是 int open(const char *pathname,int flags,mode_tmode); 这个时候我们还要指定 mode 标志,用来表示文件的访问权限。

Linux用 5 个数字来表示文件的各种权限:第一位表示设置用户 ID;第二位表示设置组 ID;第三位表示用户自己的权限位;第四位表示组的权限;最后一位表示其他人的权限。每个数字可以取 1(执
行权限)、 2(写权限)、 4(读权限)、 0(无)或者是这些值的和。例如,要创建一个用户可读、可写、可执行,但是组没有权限,其他人可以读、可以执行的文件,并设置用户 ID 位。那么,
我们应该使用的模式是 1 (设置用户 ID)、 0(不设置组 ID)、 7( 1+2+4,读、写、执行)、 0(没有权限)、 5( 1+4,读、执行)

即 10 705:open("test", O_CREAT, 10 705);
上述语句等价于:
open("test", O_CREAT, S_IRWXU | S_IROTH | S_IXOTH | S_ISUID );
如果文件打开成功, open 函数会返回一个文件描述符,以后对该文件的所有操作就可以通过
对这个文件描述符进行操作来实现。
3. 读写
在文件打开以后,我们才可对文件进行读写, Linux 中提供文件读写的系统调用是 read、 write
函数:
int read(int fd, const void *buf, size_t length);
int write(int fd, const void *buf, size_t length);
其中 参数 buf 为指向缓冲区的指针, length 为缓冲区的大小(以字节为单位)。函数 read()实
现从文件描述符 fd 所指定的文件中读取 length 个字节到 buf 所指向的缓冲区中,返回值为实际读
取的字节数。函数 write 实现将把 length 个字节从 buf 指向的缓冲区中写到文件描述符 fd 所指向
的文件中,返回值为实际写入的字节数。
以 O_CREAT 为标志的 open 实际上实现了文件创建的功能,因此,下面的函数等同 creat()函数:
int open(pathname, O_CREAT | O_WRONLY | O_TRUNC, mode);
4. 定位
lseek()将文件读写指针相对 whence 移动 offset 个字节。操作成功时,返回文件指针相对于文
件头的位置。参数 whence 可使用下述值:
SEEK_SET:相对文件开头
SEEK_CUR:相对文件读写指针的当前位置
SEEK_END:相对文件末尾
offset 可取负值,例如下述调用可将文件指针相对当前位置向前移动 5 个字节:
lseek(fd, -5, SEEK_CUR);
由于 lseek 函数的返回值为文件指针相对于文件头的位置,因此下列调用的返回值就是文件
的长度:
lseek(fd, 0, SEEK_END);
5. 关闭
当我们操作完成以后,我们要关闭文件了,只要调用 close 就可以了,其中 fd 是我们要关闭
的文件描述符:
int close(int fd);

linux c学习笔记08--文件操作的更多相关文章

  1. Linux系统学习笔记:文件I/O

    Linux支持C语言中的标准I/O函数,同时它还提供了一套SUS标准的I/O库函数.和标准I/O不同,UNIX的I/O函数是不带缓冲的,即每个读写都调用内核中的一个系统调用.本篇总结UNIX的I/O并 ...

  2. python学习笔记(三):文件操作和集合

    对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 文件基本操作: f = open('file.txt','r') #以只读方式打开一个 ...

  3. Java 学习笔记(14)—— 文件操作

    java文件操作主要封装在Java.io.File中,而文件读写一般采用的是流的方式,Java流封装在 java.io 包中.Java中流可以理解为一个有序的字符序列,从一端导向到另一端.建立了一个流 ...

  4. python学习笔记之文件操作(三)

    这篇博客小波主要介绍一下python对文件的操作 对文件的操作主要分为三步: 1.打开文件获取文件的句柄,句柄也是文件描述符 2.通过文件句柄操作文件 3.关闭文件. 现有以下文件,是小波随写的周杰伦 ...

  5. node 学习笔记 - fs 文件操作

    本文同步自我的个人博客:http://www.52cik.com/2015/12/03/learn-node-fs.html 最近看到群里不少大神都开始玩 node 了,我感觉跟他们步伐越来越大了, ...

  6. python学习笔记三 文件操作(基础篇)

    文件操作 打开文件 open(name[,mode[,buffering]])   open函数使用一个文件名作为强制参数,然后返回一个文件对象.[python 3.5 把file()删除掉]   w ...

  7. python的学习笔记01_5文件操作

    一,文件操作基本流程. 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众 ...

  8. node学习笔记3——文件操作fs

    文件操作关键字: http('fs') ——  请求 node 里面的 http 模块 readFile ——  读文件,参数包括 文件名,回调函数 writeFile ——  写文件,参数包括 文件 ...

  9. Python学习笔记 - day5 - 文件操作

    Python文件操作 读写文件是最常见的IO操作,在磁盘上读写文件的功能都是由操作系统提供的,操作系统不允许普通的程序直接操作磁盘(大部分程序都需要间接的通过操作系统来完成对硬件的操作),所以,读写文 ...

  10. python学习笔记4(文件操作)

    文件操作: 1.f=open(”caidan”,”w”,encoding=”utf8”)      直接打开一个文件,如果文件不存在则创建文件 f.close() 2.with open (”caid ...

随机推荐

  1. meta 标签 详细说明

    meta 标签可提供页面元素信息, 使用键值对的定义方式,可以记录网页上的主要信息,也可以自定义键值对 属性 content(必须),name,http-equiv,scheme,lang 常用 me ...

  2. jsLoader、cssLoader、imageLoader

    //js文件加载 function jsLoader(url,callback){ var script = document.createElement("script"); s ...

  3. 【转】Oracle表分区

    源地址:http://love-flying-snow.iteye.com/blog/573303

  4. 路由跟踪语法:tracert www.love125.com

    tracert  www.love125.com 路由跟踪语法

  5. [C#对sql操作]C#对sql server 2008数据库操作

    using System.Data; using System.Data.SqlClient SqlConnection conn = new SqlConnection(System.Configu ...

  6. (Array)121. Best Time to Buy and Sell Stock

    Say you have an array for which the ith element is the price of a given stock on day i. If you were ...

  7. apache配置Allow详解及25个常见问题

    http://www.cnblogs.com/top5/archive/2009/09/22/1571709.html apache常见25个问题:http://blog.csdn.net/keda8 ...

  8. hadoop namenpde机制

    1:通过查看hadoop的临时目录,看到有fsimage和edit文件 2:fsimage时namenode的元数据内存镜像文件,edit文件时hadoop客户端的操作记录, edit_inproce ...

  9. Linux里的2>&1

    我们在Linux下经常会碰到nohup command>/dev/null 2>&1 &这样形式的命令.首先我们把这条命令大概分解下首先就是一个nohup表示当前用户和系统 ...

  10. 最长公共子序列LCS问题

    很经典的一个问题,也是常考的问题