`

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系统编程手册源码

    《Linux/UNIX系统编程手册》是一本权威的指南,涵盖了操作系统的核心编程接口,为开发者提供了深入理解操作系统底层机制的窗口。源码分析是学习这些概念的最直接方式,因为它们揭示了内核如何与应用程序交互。以下是...

    Linux/UNIX系统编程手册课后习题代码

    《Linux/UNIX系统编程手册》是一本经典的教材,它深入浅出地介绍了Linux和UNIX操作系统下的编程接口。这本书涵盖了各种核心API,包括文件操作、进程管理、网络通信、信号处理等,是学习系统级编程的重要参考资料。...

    linux/unix系统编程手册附录代码

    《Linux/Unix系统编程手册》是一本深受程序员和系统管理员喜爱的经典著作,它详细阐述了在Linux和Unix操作系统上进行低级编程的各种技术。附录中的代码是书中的实例,旨在帮助读者深入理解和掌握这些系统编程的核心...

    Linux-UNIX系统编程手册.pdf

    此外,它还详细说明了Linux专有特性如epoll、inotify和/proc文件系统,以及UNIX标准(POSIX.1-2001/SUSv3和POSIX.1-2008/SUSv4)的内容,这使得该手册不仅适用于Linux平台,同样对于在其他UNIX平台下工作的程序员也...

    linux/unix 系统编程手册

    2. **文件和I/O系统调用**:深入讨论了打开、关闭、读取、写入文件的机制,以及标准I/O库和低级I/O的区别。同时,涵盖了文件描述符、缓冲I/O、异步I/O等内容。 3. **信号处理**:详细介绍了信号的概念,如何安装...

    Linux/UNIX系统编程手册(源代码)

    《Linux/UNIX系统编程手册》是一本权威的指南,涵盖了操作系统接口、系统调用和C库函数等核心主题。这份源代码是该手册的实践部分,允许开发者在Linux环境中深入理解并实践书中所述的编程技术。以下是基于这些信息的...

    linux/unix系统编程手册(下)

    《Linux/Unix系统编程手册(下)》是深入理解Linux和Unix操作系统内核与系统编程不可或缺的参考书籍。这本书详细阐述了在这些操作系统环境下进行程序设计、系统调用、网络编程以及文件操作等方面的关键概念和技术。 ...

    Linux/UNIX系统编程手册 源码

    3. **文件和I/O操作**:文件打开、关闭、读写、追加、随机访问等操作,以及标准I/O库和低级别文件操作的区别。还有可能涉及到异步I/O和缓冲技术。 4. **信号处理**:如何安装信号处理器,以及如何接收和处理信号,...

    Linux/UNIX网络编程》-甘刚-电子教案

    《Linux/UNIX网络编程》是甘刚教授撰写的一本深入探讨网络编程技术的专业书籍,主要针对使用Linux和UNIX操作系统进行网络应用开发的程序员。这本书详细介绍了如何在这些系统上构建网络应用程序,涵盖了从基础概念到...

    Linux_UNIX系统编程手册(上).pdf

    《Linux_UNIX系统编程手册》是一本深度探讨Linux和UNIX系统编程的经典著作,旨在帮助开发者深入理解操作系统内核与应用程序之间的交互机制。这本书分为上下两册,我们这里关注的是上册,它涵盖了诸多基础且重要的...

    Linux UNIX系统编程手册(下册)

    同时,也会学习到标准C库中的函数,如stdio.h、string.h和stdlib.h等头文件中的函数,它们提供了更高级别的抽象,使得编程更加方便。 其次,深入探讨了进程管理。这包括进程的创建、同步、通信以及信号机制。读者将...

    Linux/UNIX系统编程手册

    4. **文件和I/O流**:涵盖标准输入/输出(stdio)库和低级别的文件操作。了解fdopen(), fopen(), fseek(), fclose()等函数以及缓冲机制。 5. **内存管理**:包括动态内存分配(malloc, calloc, realloc, free)和...

    《linux/unix系统编程手册》官方参考源码

    《Linux/Unix系统编程手册》是一本权威的指南,涵盖了操作系统的核心编程概念和技术。这本书的官方参考源码提供了丰富的示例程序,帮助读者深入理解书中的理论内容,并将其转化为实践。源码的可用性经过验证,确保了...

    《LINUX/UNIX系统编程手册》.((德)Michael Kerrisk )随书代码完整版

    3. **文件I/O**:详细阐述了标准I/O库、低级I/O(open()、read()、write()等)和磁盘文件操作,包括文件描述符、文件状态标志等。 4. **套接字网络编程**:介绍了TCP/IP网络编程,包括socket()、bind()、listen()、...

    Linux-Unix系统编程手册

    根据提供的信息,《Linux-Unix系统编程手册》是一本详尽且深入探讨Linux和UNIX系统编程接口的专业书籍。此书由德国作者Michael Kerrisk撰写,并由孙剑、许从年、董健、孙余强等人翻译成中文。该书旨在帮助读者深入...

    Linux-UNIX系统编程手册(上册)1

    此外,本书还特别关注Linux特有的特性,如epoll、inotify和/proc文件系统,同时兼顾了UNIX标准(如POSIX.1-2001/SUSv3和POSIX.1-2008/SUSv4),使得该书成为跨平台UNIX系统编程的宝贵资源。 总的来说,《Linux-UNIX...

    UNIX环境高级编程_Linux/Unix编程_

    《UNIX环境高级编程》是一本深入探讨Linux/Unix系统编程的经典著作,对于任何希望在这些操作系统上进行系统级编程的开发者来说,都是不可或缺的参考书。这本书详细介绍了如何利用UNIX/Linux系统的API和工具来构建...

    exercise_one_due2v3_Linux/Unix编程_

    4. **文件I/O**:理解文件描述符、标准输入/输出和重定向,掌握open(), read(), write(), close()等函数。 5. **权限和文件系统**:学习Linux的文件权限模型,理解用户、组和权限设置,以及如何使用chown(), chmod...

    Linux/Unix系统编程手册 源代码

    《Linux/Unix系统编程手册》是一本权威且深入的书籍,涵盖了Linux和Unix操作系统的系统级编程技术。这本书的源代码提供了实践操作的实例,帮助读者深入理解如何在这些系统中编写高效的程序。源代码的获取是直接从...

Global site tag (gtag.js) - Google Analytics