/*************压缩文件操作*************************/
//------------------------------------------------------------------- -----------------
// 函数名: gzopen
// 功能描述: 打开名为file的gz文件
// 参数: file:文件名 mode:打开模式 'r'
// 返回值: 打开的gz文件描述符
//-----------------------------------------------------------------------------------
gzFile gzopen(const char *file, const char *mode);
//------------------------------------------------------------------- -----------------
// 函数名: gzclose
// 功能描述: 关闭为file的gz文件
// 参数: file:文件名 mode:打开模式 'r'
// 返回值: 0 正常关闭; -2 文件异常; -4 内存异常
//-------------------------------------------------------------------------------------
int gzclose(gzFile file);
//------------------------------------------------------------------- -----------------
// 函数名: gzread
// 功能描述: 读取名为file的gz文件的len个字符
// 参数: file:文件名 buf:存储读取字符的数组 len:最多读取字符个数
// 返回值: 正整数 正常读取字符数; -5 缓存区异常; 0 读取结束
//-----------------------------------------------------------------------------------
int gzread(gzFile file, void* buf, unsigned len);
//------------------------------------------------------------------- -----------------
// 函数名: gzwrite
// 功能描述: 向名为file的gz文件的写入缓存区中的len个字符
// 参数: file:文件名 buf:待存入字符的数组 len:写入字符个数
// 返回值: 正整数 实际写入字符数; 0 写入异常
//-----------------------------------------------------------------------------------
int gzwrite(gzFile file,void * buf, unsigned len));
//------------------------------------------------------------------- -----------------
// 函数名: gzprintf
// 功能描述: 向名为file的gz文件的按照格式format写入数据
// 参数: file:文件名 format:写入格式
// 返回值: 正整数 实际写入字符数; 0 写入异常
//-----------------------------------------------------------------------------------
int gzprintf(gzFile file, const char *format, ...);
//------------------------------------------------------------------- -----------------
// 函数名: gzputs
// 功能描述: 向名为file的gz文件的写入字符串s的内容
// 参数: file:文件名 format:写入格式
// 返回值: 非负整数 实际写入字符数; -1 写入异常
//-----------------------------------------------------------------------------------
int gzputs(gzFile file, const char *s);
//------------------------------------------------------------------- -----------------
// 函数名: gzgets
// 功能描述: 从名为file的gz文件读取字符.读取len-1个字符结束读取字符,或者遇到换行符结束读取字符,或者遇到文件结束符结束读取字符。
// 参数: file:文件名 buf:存储读取内容的字符数组 len:读取长度
// 返回值: 字符串地址: 读取以'\0'结束的字符串时; NULL:遇到错误或者读取到文件结束符时
//-----------------------------------------------------------------------------------
char * gzgets(gzFile file, char *buf, int len);
/*************普通文件操作*************************/
//-------------------------------------------------------------------------------------
// 函数名: close
// 功能描述:关闭文件
// 参数: fd:已打开的文件描述符
// 返回值: 若文件顺利关闭则返回0,发生错误时返回-1
//-------------------------------------------------------------------------------------
int close(int fd);
//-------------------------------------------------------------------------------------
// 函数名: open
// 功能描述: 按照设置的模式打开文件
/* 参数: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
//-------------------------------------------------------------------------------------
int open(const char * pathname, int flags);
int open( const char * pathname,int flags, mode_t mode);
//-------------------------------------------------------------------------------------
// 函数名: read
// 功能描述: read()会把参数fd 所指的文件传送count个字节到buf指针所指的内存中
// 参数: fd 待读取的文件描述符 buf 数据存储缓存区 count 指定读取的字符个数
// 返回值: 若参数count为0,则read()不会有作用并返回0。否则返回值为实际读取到的字节数,如果返回0,表示已到达文件尾或是无可读取的数据
//-------------------------------------------------------------------------------------
ssize_t read(int fd, void * buf, size_t count);
//-------------------------------------------------------------------------------------
// 函数名: write
// 功能描述:write()会把参数buf所指的内存写入count个字节到参数fd所指的文件内
// 参数: fd 待写入的文件描述符 buf 数据缓存区 count 指定写入的字符个数
// 返回值: 如果顺利write()会返回实际写入的字节数 ; -1 写入异常
//-------------------------------------------------------------------------------------
ssize_t write(int fd, const void* buf, size_t count);
//-------------------------------------------------------------------------------------
// 函数名:
// 功能描述:
/* 参数:
参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。
mode有下列几种形态字符串:
r 打开只读文件,该文件必须存在。
r+ 打开可读写的文件,该文件必须存在。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。
不过在POSIX系统,包含Linux都会忽略该字符。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask值。
*/
// 返回值: 文件顺利打开后,指向该流的文件指针就会被返回。NULL 文件打开失败
//-------------------------------------------------------------------------------------
FILE * fopen(const char * path, const char * mode);
//-------------------------------------------------------------------------------------
// 函数名: fclose
// 功能描述: 关闭文件
// 参数: stream 已打开的文件描述符
// 返回值: 若关文件动作成功则返回0,有错误发生时则返回EOF
//-------------------------------------------------------------------------------------
int fclose(FILE * stream);
//-------------------------------------------------------------------------------------
// 函数名: fwrite
// 功能描述: 用来将数据写入文件流中
// 参数: 参数stream为已打开的文件指针,参数ptr 指向欲写入的数据地址,总共写入的字符数以参数size*nmemb来决定
// 返回值: 返回实际写入的nmemb数目
//-------------------------------------------------------------------------------------
size_t fwrite(const void* ptr, size_t size, size_t nmemb, FILE * stream);
//-------------------------------------------------------------------------------------
// 函数名: fread
// 功能描述: 从文件流中读取数据
// 参数: 参数stream为已打开的文件指针,参数ptr 指向欲存放读取进来的数据空间,读取的字符数以参数size*nmemb来决定
// 返回值: 会返回实际读取到的nmemb数目,如果此值比参数nmemb 来得小,则代表可能读到了文件尾或有错误发生
//-------------------------------------------------------------------------------------
size_t fread(void * ptr, size_t size, size_t nmemb, FILE * stream);
/*************流文件操作***************************/
//ofstream ifstream fstream
//-------------------------------------------------------------------------------------
// 函数名: open
// 功能描述: 按照指定模式打开流文件
// 参数: filename 流文件绝对路径 openmode 打开文件模式
// 返回值: 无
//-------------------------------------------------------------------------------------
void open( const char *filename );
void open( const char *filename, openmode mode );
//-------------------------------------------------------------------------------------
// 函数名: close
// 功能描述: 关闭流文件
// 参数: 无
// 返回值: 无
//-------------------------------------------------------------------------------------
void close();
//-------------------------------------------------------------------------------------
// 函数名: read
// 功能描述:函数read()用于输入流,在将字符放入buffer 之前从流中读取num 个字节。如果碰到EOF,read()中止,丢弃不论多少个字节已经放入
// 参数: buffer 输入缓存 num输入字符个数
// 返回值: 输入流
//-------------------------------------------------------------------------------------
istream &read( char *buffer, streamsize num );
//-------------------------------------------------------------------------------------
// 函数名: write
// 功能描述: 用于输出流,将buffer中读取num个字符放入输出流中
// 参数: buffer输出字符缓存 num输出字符个数
// 返回值: 输出流
//-------------------------------------------------------------------------------------
ostream &write( const char *buffer, streamsize num );
//-------------------------------------------------------------------------------------
// 函数名:
// 功能描述:getline()函数用于输入流,读取字符到buffer中,直到下列情况发生
/*
num - 1个字符已经读入,
碰到一个换行标志,
碰到一个EOF,
或者,任意地读入,直到读到字符delim。delim字符不会被放入buffer中。
*/
// 参数: buffer输出字符缓存 num 字符个数 delim 结束字符
// 返回值: 输出流
//-------------------------------------------------------------------------------------
istream &getline( char *buffer, streamsize num );
istream &getline( char *buffer, streamsize num, char delim );
#endif