linux下C中文件操作及文件结构体:FILE,open(),close()
来源:互联网 发布:ui设计软件下载 编辑:程序博客网 时间:2024/05/29 14:58
###Date: 2017-12-24
###Author: SoaringLee
=======================================================================================
一、Linux系统下面c中的文件结构体FILE:
该结构体定义在:/usr/include/libio.h
struct _IO_FILE { int _flags; /* High-order word is _IO_MAGIC; rest is flags. */ #define _IO_file_flags _flags /* The following pointers correspond to the C++ streambuf protocol. */ /* Note: Tk uses the _IO_read_ptr and _IO_read_end fields directly. */ char* _IO_read_ptr; /* Current read pointer */ char* _IO_read_end; /* End of get area. */ char* _IO_read_base; /* Start of putback+get area. */ char* _IO_write_base; /* Start of put area. */ char* _IO_write_ptr; /* Current put pointer. */ char* _IO_write_end; /* End of put area. */ char* _IO_buf_base; /* Start of reserve area. */ char* _IO_buf_end; /* End of reserve area. */ /* The following fields are used to support backing up and undo. */ char *_IO_save_base; /* Pointer to start of non-current get area. */ char *_IO_backup_base; /* Pointer to first valid character of backup area */ char *_IO_save_end; /* Pointer to end of non-current get area. */ struct _IO_marker *_markers; struct _IO_FILE *_chain; int _fileno; #if 0 int _blksize; #else int _flags2; #endif _IO_off_t _old_offset; /* This used to be _offset but it's too small. */ #define __HAVE_COLUMN /* temporary */ /* 1+column number of pbase(); 0 is unknown. */ unsigned short _cur_column; signed char _vtable_offset; char _shortbuf[1]; /* char* _save_gptr; char* _save_egptr; */ _IO_lock_t *_lock; #ifdef _IO_USE_OLD_IO_FILE };
在头文件/usr/include/stdio.h中对libio.h中的struct _IO_FILE进行typedef:
typedef struct _IO_FILE_ FILE
使用文件FILE结构体及其相关函数需要包含以下头文件:
#inlcude <stdio.h>或者#include <libio.h>或者#include <unistd.h>
关于unistd.h头文件的介绍:http://blog.csdn.net/ybsun2010/article/details/24832113
二、Linux c open()和close():
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);
返回值:成功返回新分配的文件描述符,出错返回-1并设置
errno。
pathname
参数是要打开或创建的文件名,和fopen
一样,pathname
既可以是相对路径也可以是绝对路径。
flags
参数有一系列常数值可供选择,可以同时选择多个常数用按位或运算符连接起来,所以这些常数的宏定义都以O_
开头,表示or。
必选项:以下三个常数中必须指定一个,且仅允许指定一个。
O_RDONLY
只读打开O_WRONLY
只写打开O_RDWR
可读可写打开
以下可选项可以同时指定0个或多个,和必选项按位或起来作为flags
参数。
O_APPEND
表示追加。如果文件已有内容,这次打开文件所写的数据附加到文件的末尾而不覆盖原来的内容。O_CREAT
若此文件不存在则创建它。使用此选项时需要提供第三个参数mode
,表示该文件的访问权限。O_EXCL
如果同时指定了O_CREAT
,并且文件已存在,则出错返回。O_TRUNC
如果文件已存在,并且以只写或可读可写方式打开,则将其长度截断(Truncate)为0字节。O_NONBLOCK
对于设备文件,以O_NONBLOCK
方式打开可以做非阻塞I/O(Nonblock I/O)。
第三个参数
mode
指定文件权限,可以用八进制数表示,比如0644表示-rw-r--r--
,也可以用S_IRUSR
、S_IWUSR
等宏定义按位或起来表示,详见open(2)
的Man Page。要注意的是,文件权限由open
的mode
参数和当前进程的umask
掩码共同决定。close
函数关闭一个已打开的文件:#include <unistd.h>int close(int fd);
返回值:成功返回0,出错返回-1并设置
errno。
参数fd是要关闭的文件描述符。需要说明的是,当一个进程终止时,内核对该进程所有尚未关闭的文件描述符
调用close关闭,所以即使用户程序不调用close,在终止时内核也会自动关闭它打开的所有文件。但是对于一
个长年累月运行的程序(比如网络服务器),打开的文件描述符一定要记得关闭,否则随着打开的文件越来越
多,会占用大量文件描述符和系统资源。
Example:
//filename:test.c//#include <error.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int main(int argc, const char *argv[]){ int fd = open("mytest", O_RDWR | O_CREAT, 0666); if (fd == -1) perror("open file mytest"); close(fd); return 0;}
编译:$cc
test
.c
执行:$.
/a
.out
查看结果:$
umask
0002
$ll
总计 12
-rwxrwxr-x 1 joseph joseph 5085 12-17 10:35 a.out
-rw-rw-r– 1 joseph joseph 0 12-17 10:33 mytest
-rw-rw-r– 1 joseph joseph 263 12-17 10:35
test
.c
以上例子以mode 0666创建一个文件mytest,而
umask
是0002,
所以创建的文件权限是0666-0002=0664(-rw-rw-r–)。
Reference:
http://blog.csdn.net/liuguxing/article/details/7863112
http://joe.is-programmer.com/posts/17463.html
阅读全文
0 0
- linux下C中文件操作及文件结构体:FILE,open(),close()
- Linux中文件描述符与FILE结构体
- 关于qt在linux下使用open,write,close等文件操作的笔记
- c/c++中文件的操作大全,可以了解向文件读取一个结构体
- c中文件的操作大全,可以了解向文件读取一个结构体
- c/c++中文件的操作大全,可以了解向文件读取一个结构体
- 文件操作open , close, creat
- Linux基础编程-文件操作open,lseek,read,write,close
- Linux基础编程-文件操作open,lseek,read,write,close
- Linux文件操作函数open close read write等示例
- Linux基础编程-文件操作open,lseek,read,write,close
- linux文件操作open close read write lseek
- Linux 文件操作 open,lseek,read,write,close
- linux系统编程:文件操作--open、create、close
- linux文件操作函数(open、write、read、close)
- linux文件操作函数(open、write、read、close)
- Linux-文件操作(open、write、read、close、iotcl)
- linux文件操作函数(open、write、read、close)
- numpy.log
- POJ 3281 Dining(转换+最大流)
- Sublime text 3 打造Java编译环境
- 通过dockerfile 创建镜像以及更新镜像
- 查看python下OpenCV版本
- linux下C中文件操作及文件结构体:FILE,open(),close()
- insight jquery ajax参数序列化
- 适配器模式
- 数据结构与算法分析-C语言描述 3.2
- 王百琛的期末总结
- 单链表(创建,增,删,查,改,打印,销毁链表)
- break和continue的区别
- 讯飞语音识别
- CDR X6设计师的福利,3折特惠!