使用C语言操作文件的基本函数整理

C语言creat()函数:创建文件函数

头文件:

#include <sys/types.h>  #include <sys/stat.h>  #include <fcntl.h>

定义函数:

int creat(const char * pathname, mode_tmode);

函数说明:
1、参数 pathname 指向欲建立的文件路径字符串。
2、Creat()相当于使用下列的调用方式调用open()
    open(const char * pathname, (O_CREAT|O_WRONLY|O_TRUNC));

错误代码:关于参数 mode 请参考open()函数.

返回值:

  • creat()会返回新的文件描述词, 若有错误发生则会返回-1, 并把错误代码设给errno.
  • EEXIST参数:pathname 所指的文件已存在.
  • EACCESS参数:pathname 所指定的文件不符合所要求测试的权限
  • EROFS:欲打开写入权限的文件存在于只读文件系统内
  • EFAULT参数:pathname 指针超出可存取的内存空间
  • EINVAL参数:mode 不正确.
  • ENAMETOOLONG参数:pathname 太长.
  • ENOTDIR 参数:pathname 为一目录
  • ENOMEM :核心内存不足
  • ELOOP 参数:pathname 有过多符号连接问题.
  • EMFILE:已达到进程可同时打开的文件数上限
  • ENFILE:已达到系统可同时打开的文件数上限

附加说明:creat()无法建立特别的装置文件, 如果需要请使用mknod().

C语言open()函数:打开文件函数

头文件:

#include <sys/types.h>  #include <sys/stat.h>  #include <fcntl.h>

定义函数:

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

函数说明:

参数 pathname 指向欲打开的文件路径字符串. 下列是参数flags 所能使用的旗标:

  • O_RDONLY 以只读方式打开文件
  • O_WRONLY 以只写方式打开文件
  • O_RDWR 以可读写方式打开文件. 上述三种旗标是互斥的, 也就是不可同时使用, 但可与下列的旗标利用OR(|)运算符组合.
  • O_CREAT 若欲打开的文件不存在则自动建立该文件.
  • O_EXCL 如果O_CREAT 也被设置, 此指令会去检查文件是否存在. 文件若不存在则建立该文件, 否则将导致打开文件错误. 此外, 若O_CREAT 与O_EXCL 同时设置, 并且欲打开的文件为符号连接, 则会打开文件失败.
  • O_NOCTTY 如果欲打开的文件为终端机设备时, 则不会将该终端机当成进程控制终端机.
  • O_TRUNC 若文件存在并且以可写的方式打开时, 此旗标会令文件长度清为0, 而原来存于该文件的资料也会消失.
  • O_APPEND 当读写文件时会从文件尾开始移动, 也就是所写入的数据会以附加的方式加入到文件后面.
  • O_NONBLOCK 以不可阻断的方式打开文件, 也就是无论有无数据读取或等待, 都会立即返回进程之中.
  • O_NDELAY 同O_NONBLOCK.
  • O_SYNC 以同步的方式打开文件.
  • O_NOFOLLOW 如果参数pathname 所指的文件为一符号连接, 则会令打开文件失败.
  • O_DIRECTORY 如果参数pathname 所指的文件并非为一目录, 则会令打开文件失败。注:此为Linux2. 2 以后特有的旗标, 以避免一些系统安全问题.

参数mode 则有下列数种组合, 只有在建立新文件时才会生效, 此外真正建文件时的权限会受到umask 值所影响, 因此该文件权限应该为 (mode-umaks).

  • S_IRWXU00700 权限, 代表该文件所有者具有可读、可写及可执行的权限.
  • S_IRUSR 或S_IREAD, 00400 权限, 代表该文件所有者具有可读取的权限.
  • S_IWUSR 或S_IWRITE, 00200 权限, 代表该文件所有者具有可写入的权限.
  • S_IXUSR 或S_IEXEC, 00100 权限, 代表该文件所有者具有可执行的权限.
  • S_IRWXG 00070 权限, 代表该文件用户组具有可读、可写及可执行的权限.
  • S_IRGRP 00040 权限, 代表该文件用户组具有可读的权限.
  • S_IWGRP 00020 权限, 代表该文件用户组具有可写入的权限.
  • S_IXGRP 00010 权限, 代表该文件用户组具有可执行的权限.
  • S_IRWXO 00007 权限, 代表其他用户具有可读、可写及可执行的权限.
  • S_IROTH 00004 权限, 代表其他用户具有可读的权限
  • S_IWOTH 00002 权限, 代表其他用户具有可写入的权限.
  • S_IXOTH 00001 权限, 代表其他用户具有可执行的权限.

返回值:若所有欲核查的权限都通过了检查则返回0 值, 表示成功, 只要有一个权限被禁止则返回-1.

错误代码:

  • EEXIST 参数pathname 所指的文件已存在, 却使用了O_CREAT 和O_EXCL 旗标.
  • EACCESS 参数pathname 所指的文件不符合所要求测试的权限.
  • EROFS 欲测试写入权限的文件存在于只读文件系统内.
  • EFAULT 参数pathname 指针超出可存取内存空间.
  • EINVAL 参数mode 不正确.
  • ENAMETOOLONG 参数 pathname 太长.
  • ENOTDIR 参数pathname 不是目录.
  • ENOMEM 核心内存不足.
  • ELOOP 参数pathname 有过多符号连接问题.
  • EIO I/O 存取错误.

附加说明:使用 access()作用户认证方面的判断要特别小心, 例如在access()后再作open()空文件可能会造成系统安全上的问题.

范例

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
main()
{
  int fd, size;
  char s[] = "Linux Programmer!\n", buffer[80];
  fd = open("/tmp/temp", O_WRONLY|O_CREAT);
  write(fd, s, sizeof(s));
  close(fd);
  fd = open("/tmp/temp", O_RDONLY);
  size = read(fd, buffer, sizeof(buffer));
  close(fd);
  printf("%s", buffer);
}

执行

Linux Programmer!

C语言close()函数:关闭文件

头文件:

#include <unistd.h>

定义函数:

int close(int fd);

函数说明:当使用完文件后若已不再需要则可使用 close()关闭该文件, 二close()会让数据写回磁盘, 并释放该文件所占用的资源. 参数fd 为先前由open()或creat()所返回的文件描述词.

返回值:若文件顺利关闭则返回0, 发生错误时返回-1.

错误代码:EBADF 参数fd 非有效的文件描述词或该文件已关闭.

附加说明:虽然在进程结束时, 系统会自动关闭已打开的文件, 但仍建议自行关闭文件, 并确实检查返回值.

(0)

相关推荐

  • C语言中建立和删除文件连接的相关函数讲解

    C语言link()函数:建立文件连接 头文件: #include <unistd.h> 定义函数: int link (const char * oldpath, const char * newpath); 函数说明:link()以参数newpath 指定的名称来建立一个新的连接(硬连接)到参数oldpath 所指定的已存在文件. 如果参数newpath 指定的名称为一已存在的文件则不会建立连接. 返回值:成功则返回0, 失败返回-1, 错误原因存于errno. 附加说明:link()所建立

  • C语言对组文件处理的相关函数小结

    C语言getgrent()函数:从组文件中取得账号的数据 头文件: #include <grp.h> #include <sys/types.h> 定义函数: struct group * getgrent(void); 函数说明:getgrent()用来从组文件(/etc/group)中读取一项组数据, 该数据以group 结构返回. 第一次调用时会取得第一项组数据, 之后每调用一次就会返回下一项数据, 直到已无任何数据时返回NULL. struct group { char *

  • C语言中对文件最基本的读取和写入函数

    C语言read()函数:读文件函数(由已打开的文件读取数据) 头文件: #include <unistd.h> 定义函数: ssize_t read(int fd, void * buf, size_t count); 函数说明:read()会把参数fd 所指的文件传送count 个字节到buf 指针所指的内存中. 若参数count 为0, 则read()不会有作用并返回0. 返回值为实际读取到的字节数, 如果返回0, 表示已到达文件尾或是无可读取的数据,此外文件读写位置会随读取到的字节移动.

  • C语言文件操作 fopen, fclose, mkdir详解

    1.建文件夹 int _mkdir(const char *path,mode_t mode); 函数名: _mkdir 功 能: 建立一个目录 用 法: int _mkdir( const char *dirname ); 头文件库:direct.h 返回值:创建一个目录,若成功则返回0,否则返回-1 ===================================================== 2.打开文件fopen() 函数功能: 打开一个文件 函数原型:FILE * fope

  • C语言读取文件流的相关函数用法简介

    C语言fread()函数:读文件函数(从文件流读取数据) 头文件: #include <stdio.h> 定义函数: size_t fread(void * ptr, size_t size, size_t nmemb, FILE * stream); 函数说明:fread()用来从文件流中读取数据. 参数stream 为已打开的文件指针, 参数ptr 指向欲存放读取进来的数据空间, 读取的字符数以参数size*nmemb 来决定. Fread()会返回实际读取到的nmemb 数目, 如果此值

  • C语言以数据块的形式读写文件实例代码

    fgets() 有局限性,每次最多只能从文件中读取一行内容,因为 fgets 遇到换行符就结束读取.如果希望读取多行内容,需要使用 fread 函数:相应地写入函数为 fwrite. fread() 函数用来从指定文件中读取块数据.所谓块数据,也就是若干个字节的数据,可以是一个字符,可以是一个字符串,可以是多行数据,并没有什么限制.fread() 的原型为: size_t fread ( void *ptr, size_t size, size_t count, FILE *fp ); fwri

  • C语言中获取文件状态的相关函数小结

    C语言stat()函数:获取文件状态 头文件: #include <sys/stat.h> #include <unistd.h> 定义函数: int stat(const char * file_name, struct stat *buf); 函数说明:stat()用来将参数file_name 所指的文件状态, 复制到参数buf 所指的结构中. 下面是struct stat 内各参数的说明: struct stat { dev_t st_dev; //device 文件的设备编

  • 使用C语言操作文件的基本函数整理

    C语言creat()函数:创建文件函数 头文件: #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> 定义函数: int creat(const char * pathname, mode_tmode); 函数说明: 1.参数 pathname 指向欲建立的文件路径字符串. 2.Creat()相当于使用下列的调用方式调用open()     open(const char * pathname,

  • R语言操作文件方法详解教程

    目录 1. 文件与文件夹列表的读取 2. 新建文件与文件夹 3. 文件与文件夹的删除 4. 查看文件与文件夹是否存在 小练习 由于最近在处理一些真实数据时涉及到嵌套的 .tar.gz 文件的解压,手动一个一个解压过于麻烦.可以使用 shell 脚本或者 bat 脚本来做,但想尝试使用 R 语言对其进行完全解压,这里就需要涉及到对文件与文件夹的一些操作. 网上已经有许多现有教程,这里参考了很多网上的代码,不过会尝试尽量写得更加详细. 整篇文章我们的测试目录结构如下(生成目录结构树,可以直接在当前路

  • python操作文件的参数整理

    open() 方法 Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError. 注意:使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法. open() 函数常用形式是接收两个参数:文件名(file)和模式(mode). open(file, mode='r') 完整的语法格式为: open(file, mode='r', buffering=-1, encoding=Non

  • C语言实现文件读写操作

    本文实例为大家分享了C语言实现文件读写操作的具体代码,供大家参考,具体内容如下 键盘读入字符串写到文件中,再从文件读出显示在控制台 #include<stdio.h> #include<string.h> int main() { FILE *fp; char string[6];//方括号中是几就输入几个字符串 if( (fp=fopen("file.txt","w"))==NULL ) { printf("cannot open

  • R语言操作XML文件实例分析

    XML是一种文件格式,它使用标准ASCII文本共享万维网,内部网和其他地方的文件格式和数据. 它代表可扩展标记语言(XML). 类似于HTML它包含标记标签. 但是与HTML中的标记标记描述页面的结构不同,在xml中,标记标记描述了包含在文件中的数据的含义. 您可以使用"XML"包读取R语言中的xml文件. 此软件包可以使用以下命令安装. install.packages("XML") 输入数据 通过将以下数据复制到文本编辑器(如记事本)中来创建XMl文件. 使用.

  • C语言中文件常见操作的示例详解

    目录 文件打开和关闭 文件写入 文件读取 fseek函数 ftell函数 Demo示例 解决读取乱码 FILE为C语言提供的文件类型,它是一个结构体类型,用于存放文件的相关信息.文件打开成功时,对它作了内存分配和初始化. 每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,使用者不必关心细节. 一般都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便. 文件打开和关闭 C语言的安全文件打开函数为_wfopen_s和_fopen_s

  • JavaScript操作文件_动力节点Java学院整理

    在HTML表单中,可以上传文件的唯一控件就是<input type="file">. 注意:当一个表单包含<input type="file">时,表单的enctype必须指定为multipart/form-data,method必须指定为post,浏览器才能正确编码并以multipart/form-data格式发送表单的数据. 出于安全考虑,浏览器只允许用户点击<input type="file">来选择本地

  • GO语言实现文件上传的示例代码

    目录 前言 文件上传 表单操作 服务端操作 流程实现 小结 前言 最近在写一个文件上传的功能,现在来进行整理总结一下go语言如何上传文件的,本文主要分享一下golang实现文件上传的流程和具体代码,供大家参考,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助. 文件上传 表单操作 要使表单能够上传文件,需要添加form的enctype属性enctype="multipart/form-data",upload.html代码如下: <html> <head> &

  • 用C语言操作MySQL数据库的通用方法

    在我们的web应用中,虽然PHP.JSP等脚本均提供了MySQL的接口,但是显然直接使用C语言具有更好的安全性和性能,在这篇文章中能够有所体现. 先看结构体: 以下代码块是用来连接数据库的通讯过程,要连接MYSQL,必须建立MYSQL实例,通过mysql_init初始化方能开始进行连接. typedef struct st_mysql { NET net; /* Communication parameters */ gptr connector_fd; /* ConnectorFd for S

  • PHP操作文件方法问答

    PHP操作文件问答  前言:  PHP中对各类数据库的操作有着支持,对文件的操作也同样有着很丰富的操作方法,很多朋友现在的操作还是基于文件操作可是有的时候在操作文件的时候还存在不少的困惑和疑点,以下是我在日常编写过程中碰到的以及坛上朋友所碰到的关于文件操作的一些问题收藏吧.  问:如何新建一个文件?  答: 1.使用fopen("要建立的文件名","参数"),参数可选w,w+,a,a+  2.使用exec("echo '' > 要建立的文件名&quo

随机推荐