`

Linux/Unix C 编程 标准I/O函数(4):流定位,临时文件及其它函数

阅读更多
#include <stdio.h>
#include <wchar.h>

流定位:
long ftell(FILE *fp);
off_t ftello(FILE *fp);
计算一个流的大小,以字节为单。后者是将返回的大小以 off_t 为类型,由实现决定其具体类型。
int fseek(FILE *fp, long offset, int whence);
off_t fseeko(FILE *fp, off_t offset, int whence);
设置流的指针位置。后者以 off_t 为类型,由实现决定其具体类型。

void rewind(FILE *fp);
重置流指针位置到起始位置。

int fgetpos(FILE *fp, fpos_t *pos);
int fsetpos(FILE *fp, const fpos_t *pos);
取流位置或设置流位置,用 fpos_t 结构来保存值。

临时文件:
char *tmpnam(char *ptr);
FILES *tmpfile(void);

标准C的创建临时文件函数。

tmpnam 产生与不重名文件,并立即unlink 该文件,这样可以在程序退出或关闭该文件时被删除。

创建一个临时二进制文件(wb+),关闭或程序退出时删除。(UNIX对二进制文件不做特殊区分)

char *tempnam(const char *dir, const char *prefix);
扩展的创建临时文件函数。

第一参数允许指定路径名和文件名前缀。有4种选择,按以下顺序判断,使用第一个为真的作为目录:环境变量TMPDIR-->dir参数--> stdio.h 中的P_tmpdir-->本地目录(/tmp)。
第二参数如果不为NULL,则用它作为临时文件名的前缀,最大长度为5个字符。
int mkstemp(char *template);
参数为路径名如 /tmp/XXXXXX ,后面的 XXXXXX 为6个X,如果函数成功,template 会被修改XXXXXX成创建的文件名。此函数创建的临时文件不会被自动删除,需要程序 unlink。
tmpnam 和 tempnam 创建文件时有一个时间过程,如果在此过程中其它程序创建了同样的临时文件,则会出现问题。tempfile 和 mkstemp 不会有这样的问题。

其它函数:
int fwide(FILE *fp, int mode);
设置一个流为单字节或多字节。mode 为负:单字节;正:多字节;0:不设置。
)j]&w'YSjw0  新创建的流是没有设置的,如果在没有定向的流使用一个多字节IO函数,则该流为多字节,如果使用一个单字节IO函数,则为单字节。
freopen 函数也清除一个流的设置。

int fflush(FILE *fp);
刷新缓冲区,将所有在缓冲区的数据输出至fp

void setbuf(FILE *fp, char *buf);
设置一个流的打开或关闭缓冲,如果关闭缓冲,则 第二参数为NULL,如果打开缓冲,则应指定一个缓冲区,通常设置缓冲区后,该流为全缓冲,有些系统可能为行缓冲。
int setvbuf(FILE *fp, char *buf, int mode, size_t size);
此函数与上一函数的区别是可以设置精确的缓冲类型(全缓冲:_IOFBF,行缓冲:_IOLBF,不带缓冲:_IONBF)。

int ferror(FILE *fp);
调用此函数判断是否在操作文件时出错了
int feof(FILE *fp);
判断是否到达文件结尾

void clearerr(FILE *fp);
每个流在 FILE 对象中有2个标志:error, eof ,调用此函数清除这2个标志。

int ungetc(char c, FILE *fp);
将读出的字符回送到流中,一次回送一个字符,回送的字符不是写回文件,而是回送到缓冲区中,读出字符的顺序与送回的的顺序相反。
------------------------------------------------------------

// t_ungetc.c //test ungetc

#include <stdio.h>
#include <stdlib.h>

void main(){
FILE *fp;
char szstr[]="ab";
char szget[10];
memset(szget, 0, 10);
fp = fopen("111", "w+");
fputs(szstr, fp);
fflush(fp);
// 第一次读
fseek(fp, 0, SEEK_SET);
fgets(szget, 10, fp);
printf("szget 1 : %s\n", szget);
// 送回第一个字符
ungetc(szget[0], fp);
// 送回第二个字符
ungetc(szget[1], fp);
// 再读出来的字符串顺序应该与前面相反
memset(szget, 0, 10);
fgets(szget, 10, fp);
printf("szget 2 : %s\n", szget);
fclose(fp);
// test mkstemp
mkstemp(szdir);
printf("szdir : %s\n", szdir);
unlink(szdir);
return ;
}
------------------------------------------------------------
[sand@localhost ungetc]$ gcc -o t_ungetc t_ungetc.c
[sand@localhost ungetc]$ ./t_ungetc
szget 1 : ab
szget 2 : ba
szdir : /tmp/Al
[sand@localhost ungetc]$ cat 111
分享到:
评论

相关推荐

    《linux/UNIX系统编程手册》书上daemon章节测试实例代码(及简化)

    根据《linux/UNIX系统编程手册》的daemon章节写的一个测试become_daemon()函数程序。代码内容99%以上都是书上给的源码。此处仅注释掉不需要的内容,以及为了简化理解,做了不同平台的适配,(对于源码来说是种倒退,...

    LINUX/UNIX环境高级编程

    本书全面介绍了UNIX系统的程序设计界面—系统调用界面和标准C库提供的许多函数。 本书的前15章着重于理论知识的阐述,主要内容包括UNIX文件和目录、进程环境、进程控制、进程间通信以及各种I/O。在此基础上,分别按...

    LINUX与UNIX SHELL编程指南(很全)

    18.7.4 使用IFS读文件 189 18.7.5 带有测试条件的文件处理 190 18.7.6 扫描文件行来进行数目统计 191 18.7.7 每次读一对记录 193 18.7.8 忽略#字符 193 18.7.9 处理格式化报表 194 18.7.10 while循环和文件描述符 ...

    linux/unix平台下的网络编程

    linux/unix平台下的网络编程源代码,包括服务器、客户端的相关函数

    LINUX与UNIX SHELL编程指南

    本书共分五部分 ,详细介绍了SHELL编程技巧,各种UNIX命令及语法,还涉及了UNIX的文字处理以及少量的系统管理问题。本书内容全面,文字简洁流畅,适合SHELL编程人员学习、参考。 目录 第一部分 SHELL 第一章 文件...

    UNIX环境高级编程

    目 录 译者序 译者简介 前言 第1章 UNIX基础知识 1 ... 本书内容丰富权威,概念清晰精辟,一直以来被誉为UNIX编程的“圣经”,对于所有UNIX程序员—无论是初学者还是专家级人士—都是一本无价的参考书籍。

    Linux与unix shell编程指南

    本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 shell ...

    绝版经典 LINUX与UNIX SHELL编程指南 PDF 高清版 [16.3M]

    本书共分五部分 ,详细介绍了SHELL编程技巧,各种UNIX命令及语法,还涉及了UNIX的文字处理以及少量的系统管理问题。本书内容全面,文字简洁流畅,适合SHELL编程人员学习、参考。 目录 第一部分 SHELL 第一章 文件...

    unix环境编程电子书

    UNIX标准化及实现 19 2.1 引言 19 2.2 UNIX标准化 19 2.2.1 ISO C 19 2.2.2 IEEE POSIX 20 2.2.3 Single UNIX Specification 25 2.2.4 FIPS 26 2.3 UNIX系统实现 26 2.3.1 SVR4 26 2.3.2 4.4BSD ...

    UNIX环境高级编程第二版

    第2章 UNIX标准化及实现 17 2.1 引言 17 2.2 UNIX标准化 17 2.2.1 ANSI C 17 2.2.2 IEEE POSIX 18 2.2.3 X/Open XPG3 19 2.2.4 FIPS 19 2.3 UNIX实现 19 2.3.1 SVR4 20 2.3.2 4.3+BSD 20 2.4 标准和实现的关系 21 ...

    C语言资料linux \UNIX环境高级编程.rar

    本书全面介绍了UNIX系统的程序设计界面—系统调用界面和标准C库提供的许多函数。 本书的前15章着重于理论知识的阐述,主要内容包括UNIX文件和目录、进程环境、进程控制、进程间通信以及各种I/O。在此基础上,分别按...

    UNIX环境高级编程_第二版中文

    第2章 UNIX标准化及实现  2.1 引言  2.2 UNIX标准化  2.2.1 ISO C  2.2.2 IEEE POSIX  2.2.3 Single UNIX Specification  2.2.4 FIPS  2.3 UNIX系统实现  2.3.1 SVR4  2.3.2 4.4BSD  2.3.3 ...

    wdgialnonlinearnew.rar_Linux/Unix编程_paidd1d

    内容 simulink 非线性模块仿真正弦信号通过新回环函数,switchtest fig, switchtest mdl

    Unix/Linux C编程函数大全(完整版)中文版

    包含最全面的Unix环境C函数,中文版。易于理解,很适合跟英文对照理解Unix C函数

    UNIX环境高级编程_第2版.part2

    书中除了介绍UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程  关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪终端等方面的内容,还在  此基础上介绍了多...

    UNIX环境高级编程 不扣分哦

    本书全面介绍了UNIX系统的程序设计界面—系统调用界面和标准C库提供的许多函数。 本书的前15章着重于理论知识的阐述,主要内容包括UNIX文件和目录、进程环境、进程控制、进程间通信以及各种I/O。在此基础上,分别按...

    Linux多线程 C语言编程关于多线程

    fork 函数是Unix 系统最杰出的成就之一,它是七十年代UNIX 早期的 开发者经过长期在理论和实践上的艰苦探索后取得的成果,一方面,它使操作系统在进程管 理上付出了最小的代价,另一方面,又为程序员提供了一个简洁...

    LINUX与UNIX SHELL编程指南 高清PDF

    本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 shell...

Global site tag (gtag.js) - Google Analytics