`
yuanlanxiaup
  • 浏览: 896454 次
文章分类
社区版块
存档分类
最新评论

Linux 下的文件操作

 
阅读更多

Linux 下的文件操作

1. 使用系统调用

Linux提供了一些系统调用(System Call) 来进行文件操作,包括:open, read, write, close, lseek, ioctl, etc. (PS:系统调用可以使用汇编语言调用)

其他所有系统调用都定义在 unistd.h 中,只有open找不到,用下面的代码试了一下:


GCC(4.6.1)直接编译通过,只给了个warning: implicit declaration of function 'open', 奇怪的是printf也不用头文件,程序运行正常。哪位大侠知道指点下吧:)

open的原型定义为:


其中第二个参数常用的有:O_RDONLY, O_WRONLY, O_RDWR, O_CREAT, 都在 fcntl.h 中定义为宏, 大家不要像上面例子中那样传参。第三个参数可选,只有在创建文件的时候(第二个参数有O_CREAT)才有用。给个例子:


创建并打开文件myfile,设置权限为自己可读可执行(S_IRUSR|S_IXUSR),其他人可读(S_IROTH)。

参数很多,我也没用全,大家在自己使用的时候慢慢摸索吧,这里略了。

2. 使用库函数

文件操作除了使用系统调用,还可以使用编程语言提供的库函数(library function)。比如C的标准输入输出库:stdio.h 提供了以下一些函数:fopen, fread, fwrite, fclose, fflush fseek, etc. (PS: 其实汇编也可以调用这些函数)

这些库函数是更高级的抽象,使用了流(stream)的概念,内部使用了缓存,所以虽然库函数最终还是使用了系统调用实现自己的功能,但是比我们自己直接使用系统调用要方便,也要更高效。写起来方便写写就知道了,为什么调用起来效率低呢?写个测试也可以比出来,究其原因是因为系统调用是内核态的函数,每次调用内核都要从用户态切到内核态,更主要的是库函数内部的缓存,可以减少系统调用的次数,同样100次输出,写成系统调用就是赤裸裸的100次系统调用,相当慢;而写成库函数就可能被内部缓存保存起来调用一次系统调用输出,一次哦,效率当然也就快了。

最后给个库函数打开文件的例子:


以只读方式打开名为 file.in 的文件。fopen的声明如下:

返回一个FILE的指针,FILE是个结构体,stdio.h里面有个声明:


注释很欢乐,真正的结构体_IO_FILE定义在libio.h 里面,感兴趣可以自己去看看。

其中mode可以为:

"r" or "rb": Open for reading only

"w" or "wb": Open for writing, truncate to zero length

"a" or "ab": Open for writing, append to end of file

"r+" or "rb+" or "r+b": Open for update (reading and writing)

"w+" or "wb+" or "w+b": Open for update, truncate to zero length

"a+" or "ab+" or "a+b": Open for update, append to end of file

b表示打开一个二进制文件(binary file)。缺省则打开文本文件。


Reference:

Beginning Linux Programming, 4th Edition byNeil Matthew, Richard Stones.

The GNU C library, chapter 13.


分享到:
评论

相关推荐

    linux下文件操作

    在Linux下进行文件操作时,通常会用到文件描述符,这是用于标示打开文件的一个整数,用于区分各种文件类型和进行各种文件操作。 1. 普通文件是存储在磁盘上的常规数据文件,它允许用户进行随机访问,即通过指针定位...

    linux文件操作系统

    实现Linux文件操作通常遵循以下步骤: 1. **初始化**:首先,需要打开一个文件,使用`open()`函数,该函数返回一个文件描述符,后续的文件操作都将通过这个描述符进行。 2. **文件操作**: - 写入:使用`write()`...

    linux下的共享文件操作

    如何在linux下共享文件的操作说明,对于想在windows下访问linux系统文件的很有帮助

    linux操作系统实验文件和目录操作报告.pdf

    Linux 操作系统文件和目录操作报告 Linux 操作系统中的文件类型可以...在 Linux 操作系统中,文件操作命令非常丰富,包括 touch、cp、mv、rm、cat、find 等命令。这些命令可以帮助用户高效地管理和操作文件和目录。

    java上传文件到linux服务器,操作linux服务器上文件,下载linux服务器文件,删除linux服务器文件

    使用时,需要配置认证方式,建立连接,然后开启SFTP会话进行文件操作。在实际应用中,还需要处理异常和关闭资源,确保程序的健壮性和资源的有效利用。 总之,Java结合ganymed-ssh2库,为开发者提供了强大的工具,使...

    linux文件系统及文件操作命令

    Linux 文件系统及文件操作命令 Linux 文件系统是指 Linux 操作系统中用于存储和管理文件的系统。它提供了一个层次结构化的文件系统,允许用户存储、管理和访问文件。Linux 文件系统由多个目录组成,每个目录可以...

    linux文件操作,linux下关闭tomcat失效的处理方法,linux下压缩文件

    一、Linux文件操作 1. 文件与目录操作:在Linux中,文件和目录统称为文件对象。使用`ls`命令可以列出目录内容,`cd`用于切换目录,`mkdir`创建新目录,`rm`删除文件或目录(小心使用,因为这可能是不可逆的),`cp`...

    Linux文件IO操作

    ### Linux文件IO操作详解 #### 基本概念 Linux 文件 I/O 操作是学习 Linux 应用开发的基础,尤其对于初学者来说至关重要。本文旨在详细介绍 Linux 下的文件 I/O 操作及其相关概念。 #### 文件 在 Linux 系统中,...

    完整的linux实现ini文件操作的小列子

    完整的linux实现ini文件操作的小列子完整的linux实现ini文件操作的小列子完整的linux实现ini文件操作的小列子完整的linux实现ini文件操作的小列子完整的linux实现ini文件操作的小列子完整的linux实现ini文件操作的小...

    Linux 编程最全文件操作源码

    Linux 系统编程文件操作

    Linux C语言的配置文件操作库

    本文将深入探讨Linux环境下,C语言配置文件操作库的应用及原理。 配置文件通常是文本格式,如INI文件或JSON格式,用于存储应用的设置和参数。在C语言中,没有内置的函数可以直接处理这些文件,因此需要借助第三方库...

    linux下的文件过滤驱动

    本文将详细讲解Linux文件过滤驱动的原理、实现方法以及编译和加载过程。 文件过滤驱动的核心功能是在文件系统的I/O操作(如打开、读取、写入、关闭等)发生时插入一个中间层。当用户空间应用程序尝试进行文件操作时...

    Linux常用文件命令

    本节将详细介绍Linux常用的文件命令,包括文件系统结构、文件类型、目录操作、文件操作等方面。 一、文件系统结构 Linux文件系统是一个树形结构,由根目录(/)开始,下面有多个子目录。每个目录中可以包含文件和...

    linux下文件拷贝函数

    在Linux操作系统中,文件操作是系统编程的重要组成部分。文件拷贝是常见的文件操作之一,它涉及到文件I/O(输入/输出)以及内存管理等基础知识。本文将深入探讨Linux下的文件拷贝函数,以及如何在实际编程中实现这一...

    Linux XFS文件系统误删除文件恢复.pdf

    Linux 操作系统是一种多用户、多任务操作系统,文件被删除后,如果仍以读写方式使用磁盘,被删除文件的数据块可能会被操作系统重新分配出去,从而造成已删除数据被覆盖,对于繁忙的服务器系统更是如此。因此,当文件...

    Linux下C语言实现文件拷贝

    在Linux环境下,利用C语言进行文件操作具有高度的灵活性和效率。本文将详细介绍如何在Linux环境中使用C语言实现文件拷贝的功能,并对提供的代码进行逐行解析,帮助读者更好地理解其工作原理。 #### 二、代码解析 ...

    操作系统课程设计——Linux二级文件系统设计

    使用文件来模拟外存,进行数据结构设计和操作算法的设计,实现一个文件系统并实现基本的文件操作(为了简便文件系统,不考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容)。要求: 1、对程序的每一部分...

    Linux下文件的彻底删除.pdf

    Linux操作系统的文件系统安全性非常高,尤其是在企业或者个人数据泄露的情况下。因此,文件的彻底删除变得非常必要。 在Linux系统中,删除文件可以使用不同的方法,例如使用rm命令删除文件,但这并不能保证文件的...

    linux文件操作-系统编程

    Linux 文件操作-系统编程 Linux 文件目录操作是 Linux 系统编程的基础部分,涵盖了文件操作、目录操作和设备操作等多方面的知识点。本文将从文件指针、缓冲区、文件描述符、文件类型、文件操作函数等多方面进行...

    linux 实验报告 文件系统与文件管理.pdf

    Linux 操作系统是一种广泛使用的操作系统,它提供了强大的文件系统管理功能。本实验报告将对 Linux 文件系统和文件管理进行详细的介绍。 一、实验项目:用户与组管理 Linux 文件系统的目录结构是树状结构,每个...

Global site tag (gtag.js) - Google Analytics