@skyway
2015-04-14T12:55:32.000000Z
字数 2490
阅读 1212
C++
fopen
open
#include<fcntl.h>
int open(constchar*pathname,intflags);
int open(constchar*pathname,intflags,mode_tmode);
/*
返回值:成功则返回文件描述符,否则返回-1
access 访问模式,宏定义和含义如下:
O_RDONLY 1 只读打开
O_WRONLY 2 只写打开
O_RDWR 4 读写打开
还可选择以下模式与以上3种基本模式相与:
O_CREAT 0x0100 创建一个文件并打开
O_TRUNC 0x0200 打开一个已存在的文件并将文件长度设置为0,其他属性保持
O_EXCL 0x0400 未使用
O_APPEND 0x0800 追加打开文件
O_TEXT 0x4000 打开文本文件翻译CR-LF控制字符
O_BINARY 0x8000 打开二进制字符,不作CR-LF翻译
mode 该参数仅在access=O_CREAT方式下使用,其取值如下:
S_IFMT 0xF000 文件类型掩码
S_IFDIR 0x4000 目录
S_IFIFO 0x1000 FIFO 专用
S_IFCHR 0x2000 字符专用
S_IFBLK 0x3000 块专用
S_IFREG 0x8000 只为0x0000
S_IREAD 0x0100 可读
S_IWRITE 0x0080 可写
S_IEXEC 0x0040 可执行
*/
#include <stdio.h>
FILE *fopen(char *filename, char *mode);
/*
filename 文件名称
mode 打开模式:
r 只读方式打开一个文本文件
rb 只读方式打开一个二进制文件
w 只写方式打开一个文本文件
wb 只写方式打开一个二进制文件
a 追加方式打开一个文本文件
ab 追加方式打开一个二进制文件
r+ 可读可写方式打开一个文本文件
rb+ 可读可写方式打开一个二进制文件
w+ 可读可写方式创建一个文本文件
wb+ 可读可写方式生成一个二进制文件
a+ 可读可写追加方式打开一个文本文件
ab+ 可读可写方式追加一个二进制文件
*/
#include <stdio.h>
,是标准C中定义的;#include <fcntl.h>
是POSIX定义的,UNIX里的系统调用fopen的实现要调用open
如果程序对内存有限制,则用read/write比较好
如文件的大小是8k。用read/write,且只分配了2k的缓存,则要将此文件读出需要做4次系统调用来实际从磁盘上读出。如果用fread/fwrite,则系统自动分配缓存,则读出此文件只要一次系统调用从磁盘上读出。也就是用read/write要读4次磁盘,而用fread/fwrite则只要读1次磁盘。效率比read/write要高4倍。
fread和fwrite自动分配缓存,速度会很快。如要处理一些特殊的描述符如套接口、管道之类的用read和write。
是个很小的正整数,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。用以标明每一个被进程所打开的文件和socket。
【注】用open打开或者是创建一个文件时,open函数此时会返回一个文件描述符,此时该文件描述符只能用于write或者是read,不能在某个函数里面同时用同一个文件描述符来供write和read调用,除非调用了close关闭了该文件描述符。
#include <unistd.h>
size_t write(int fildes,const void *buf,size_t nbytes);
/*
参数说明:
fildes:与文件相对应的文件描述符,可通过调用open函数获取
buf:存放将写入文件的数据,可以是字符串,也可是其他数据。其中buf是指向字符串的指针
nbytes:需写进文件的字节数
返回值:
-1:写入失败
0:写入0个字节
x:已写入x个字节
*/
size_t read(int fildes,char *buf,size_t nbytes);
/*
参数说明:
fildes:文件描述符
buf:存放从文件中读取的数据
nbytes:希望读取的直接数
返回值:
-1:读取失败
0:读取0个字节
x:已读取x个字节
*/
int close(int fildes);
/*
参数:
fildes:文件描述符
返回:
success:0
fail:-1
*/
#include <stdio.h>
int fgetc(FILE *stream);
int getc(FILE *stream);
int getchar();
int fputc(int c FILE *stream);
int putc(int c,FILE *stream);
int putchar(int c);
fgetc是从文件流中读取下一个字符,getchar则是从标准输入中读取下一个字符,标准输入可以是我们的终端。fputc与putchar的区别与上面类似。
以上内容来自以下网络文章汇总:
http://www.cnblogs.com/hnrainll/archive/2011/08/16/2141365.html
http://blog.sina.com.cn/s/blog_6f3ff2c90100mph8.html
http://kshaojun.cool.blog.163.com/blog/static/12993731220099201193045/