1、Linux文件的基本操作

Linux文件的基本操作主要包括了文件的创建、打开、读写和关闭等基本操作。

1.1、文件操作系统调用

(1)创建文件系统函数

int creat(const char *pathname, mode_t mode);

参数:

pathname:要创建文件的名称

mode:新建文件的存取权限,可通过umask()系统调用改变文件权限

返回值:

成功:返回新的文件描述符

失败:返回-1或者其它错误号

(2)修改文件权限函数

将文件设置为新的mask,并且返回旧的mask

mode_t umask(mode_t mask);

参数:

mask:要设置的文件权限

返回值:

返回文件旧的权限

(3)文件打开函数

文件打开函数open()具有两种函数形式

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

参数:

pathname:要打开的文件名

flages:文件打开的标志

      O_RDONLY:以只读方式打开文件

      O_WRONLY:以只写方式打开文件

      O_RDWR:以读写方式打开文件

      O_APPEND:以追加的方式打开文件

      O_CREAT:创建一个文件

      O_NOBLOCK:以非阻塞的方式打开文件

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

mode:设置文件的访问权限,可以使用或逻辑进行配合使用

      S_IRUSR:用户可以读

      S_IWUSR:用户可以写

      S_IXUSR:用户可以执行

      S_IRWXU:用户可以读、写、执行

      S_IRGRP:组可以读

      S_IWGRP:组可以写

      S_IXGRP:组可以执行

      S_IRWXG:组可以读、写、执行

      S_IROTH:其他人可以读

      S_IWOTH:其他人可以写

      S_IXOTH:其他人可以执行

      S_IRWXO:其他人可以读、写、执行

      S_ISUID:设置用户执行ID

      S_ISGID:设置组的执行ID

返回值:

成功:返回文件描述符

失败:返回-1或者其他错误号

(4)文件读函数

对文件进行打开操作后,使用read()可以对文件进行读操作,函数原型如下

ssize_t read(int fd, void *buf, size_t count);

参数:

fd:要读的文件的文件描述符

buf:缓冲区,用来保存在文件中读到的内容

count:要读的字节数

返回值:

成功:返回已经读到的字节数

失败:返回-1

(5)文件写函数

对文件进行打开操作后,使用write()可以对文件进行写操作,函数原型如下

ssize_t write(int fd, const void *buf, size_t count);

参数:

fd:要写的文件的文件描述符

buf:缓冲区,保存要写入文件里面的内容

count:要写入的字节数

返回值:

成功:返回已经写入的字节数

失败:返回-1

(6)文件指针定位函数

使用lseek()能对文件指定的文件进行读写操作,函数原型如下

off_t lseek(int fd, off_t offset, int whence);

参数:

fd:要操作的文件的文件描述符

offset:相对于whence的偏移字节数,能取负值

whence:相对位置

      SEEK_SET:相对文件开头

      SEEK_CUR:相对文件读写指针的当前位置

      SEEK_END:相对文件末尾

返回值:

成功:返回新的偏移位置

失败:返回-1

(7)文件关闭函数

打开文件对文件进行相关的读写操作后,必须要关闭文件,函数原型如下

int close(int fd);

参数:

fd:要关闭的文件的文件描述符

返回值:

成功:返回0

失败:返回-1

1.2、C库文件函数调用

C库文件函数的操作独立于具体的操作系统平台

(1)文件创建和打开函数

FILE *fopen(const char *path, const char *mode);

参数:

path:要创建或者打开的文件名

mode:以何种方式打开或创建文件

      r/rb:以只读方式打开文件

      w/wb:以只写方式打开文件

      a/ab:以追加的方式打开文件,如果文件不存在,则创建文件

      r+/r+b/rb+:以读写的方式打开

      w+/w+b/wh+:以读写方式打开,如果文件不存在,则创建文件

      a+/a+b/ab+:以读和追加方式打开,如果文件不存在,则创建新文件

返回值:

成功:返回FILE文件指针

失败:返回NULL

(2)文件读写函数

C库函数支持以字符或者字符串的形式对文件进行读写操作

int fgetc(FILE *stream);
char *fgets(char *s, int size, FILE *stream);
int fputc(int c, FILE *stream);
int fputs(const char *s, FILE *stream);
int fprintf(FILE *stream, const char *format, ...);
int fscanf(FILE *stream, const char *format, ...);
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);

(3)文件指针定位函数

int fseek(FILE *stream, long offset, int whence);

参数:

stream:要操作的文件的文件指针

offset:偏移量

whence:文件的相对位置

      SEEK_SET:相对于文件头

      SEEK_CUR:相对于文件的当前位置

      SEEK_END:相对于文件的末尾

返回值:

  成功:返回0

  失败:返回-1

(4)文件关闭函数

int fclose(FILE *stream);

参数:

stream:要关闭文件的文件指针

返回值:

成功:返回0

失败:返回错误号

参考:

《LINUX设备驱动程序(第3版)》

《Linux设备驱动开发详解:基于最新的Linux 4.0内核》

Linux文件的基本操作函数的更多相关文章

  1. Linux文件IO操作函数概述

    文件概述 Linux中,一切皆文件.文件为操作系统服务和设备提供了一个简单而一致的接口.这意味着程序完全可以像使用文件那样使用磁盘文件.串行口.打印机和其他设备. 也就是说,大多数情况下,你只需要使用 ...

  2. Linux 文件的基本操作

    1>.新建空白文件: touch命令-->$ touch test 2>.新建目录: mkdir命令-->$mkdir mydir 使用 -p参数:同时创建父目录-->$ ...

  3. Linux下文件的基本操作

    文件的基本操作 新建和删除文件夹 命令#mkdir /file 在当前目录创建file文件夹 命令#rmdir /file 删除当前目录下file文件夹 复制和移动文件 命令#cp text/file ...

  4. 【转】linux C++ 获取文件信息 stat函数详解

    stat函数讲解 表头文件:    #include <sys/stat.h>             #include <unistd.h>定义函数:    int stat ...

  5. Python基础之文件的基本操作

    概述:文件的基本操作1.open 打开文件 f = open("xxx",mode="r",encoding="utf-8") #常用形式 ...

  6. Python基础-week03 集合 , 文件操作 和 函数详解

    一.集合及其运算 1.集合的概念 集合是一个无序的,不重复的数据组合,它的主要作用如下 *去重,把一个列表变成集合,就自动去重了 *关系测试,测试两组数据之前的交集.并集.差集.子集.父级.对称差集, ...

  7. Linux文件操作的主要接口API及相关细节

    操作系统API: 1.API是一些函数,这些函数是由linux系统提供支持的,由应用层程序来使用,应用层程序通过调用API来调用操作系统中的各种功能,来干活 文件操作的一般步骤: 1.在linux系统 ...

  8. Linux文件I/O学习

    Linux内核的VFS子系统: 文件描述符     对于内核而言,所有打开的文件都通过文件描述符引用.文件描述符是一个非负整数.当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符.当读 ...

  9. Linux文件权限;ACL;Setuid、Setgid、Stick bit特殊权限;sudo提权

    相关学习资料 http://blog.sina.com.cn/s/blog_4e2e6d6a0100g47o.html http://blog.csdn.net/aegoose/article/det ...

随机推荐

  1. Virtual DOM的渲染机制--猜测

    一个node的状态发生变化: 会对当前结点和子节点的数据全部进行更新: 然后进行dom比较: 比较完毕后一次性提交: 相对于以前的渲染方式: 每一个node的数据发生变化,都会产生一次渲染提交: 以上 ...

  2. idea 将java导出为可执行jar及导入jar依赖

    使用maven可以很好的帮助我们进行依赖的管理,也可以使用maven的jar包打包插件构建出可运行的jar.那针对不是用maven进行管理的普通java项目,可以通过以下方式导出可执行的jar包以及导 ...

  3. linux学习13 Linux运维常用文件管理命令及系统变量基础

    一.文件管理命令 1.cp命令,copy a.单源复制,cp [OPTION]... [-T] SOURCE DEST 如果DEST不存在:则事先创建此文件,并复制源文件的数据流至DEST中. 如果D ...

  4. java 整理

    类和类之间,接口和接口之间是继承:类和接口之间是实现:类只能单继承,接口可以多继承. 1.接口的出现扩展了功能. 2.接口其实就是暴漏出来的规则. 3.接口的出现降低了耦合性,即设备与设备之间实现了解 ...

  5. clr调试扩展和DAC

    SOS.DLL.SOSEX.DLL这两个就是用来对.NET程序在Windows调试工具中起到翻译作用的调试器扩展.简单讲就是,这两个组件是.NET项目组专门开发出来用来对.NET应用程序进行方便调试用 ...

  6. speedscope + node inspect 分析node应用调用

    生成一个简单的express 项目 使用脚手架工具 npm install -g express-generator@4 express . 启动使用inspect命令 node --inspect ...

  7. 使用docker部署微服务

    https://my.oschina.net/silenceyawen/blog/1819472 http://jvm123.com/2019/08/docker-shi-yong.html 从201 ...

  8. TCP/IP协议族基本知识

    常见的网络拓扑 两台主机通信的过程:应用进程产生消息,经由主机的 TCP/IP 协议栈发送到局域网(LAN),最后经过广域网(目前最大的广域网的因特网)中的网络设备(路由器)传给目的主机所在的局域网( ...

  9. kernel 获取ntoskrnl.exe基址

    标题: kernel shellcode之寻找ntoskrnl.exe基址 http://scz.617.cn:8/windows/201704171416.txt 以64-bits为例,这是Eter ...

  10. 「NOIP2016」换教室

    传送门 Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 $ 2n $ 节课程安排在 $ n $ 个时间段上.在第 $ i ...