`
brxonline
  • 浏览: 63893 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

UNIX编程(5)-标准IO库

    博客分类:
  • C
阅读更多
1.流的定向
freopen函数清除一个流的定向,fwide设置流的定向

#include <stdio.h>
#include <wchar.h>

int fwide(FILE *fp, int mode);
如果mode的参数值为负,fwide将试图使指定的流是字节定向的。
如果mode的参数值为正,fwide将试图使指定的流是宽定向的。
如果mode的参数值为0,fwide将不试图设置流的定向, 但返回标识该流定向的值。
2.缓冲
标准IO提供了三种类型的缓冲:
全缓冲
行缓冲
不带缓冲

有两个函数可以更改缓冲类型

#include <stdio.h>

void setbuf(FILE *restrict fp, char *restrict buf);

int setvbuf(FILE *restrict fp, char *restrict buf,
int mode,
            size_t size);




任何时候我们都可以强制冲洗一个流
#include <stdio.h>

int fflush(FILE *fp);

3.打开流

#include <stdio.h>

FILE *fopen(const char *restrict pathname, const
char *restrict type);

FILE *freopen(const char *restrict pathname, const
char *restrict type,
              FILE *restrict fp);

FILE *fdopen(int filedes, const char *type);

type参数指定对IO流的读、写方式

r or rb 为读而打开

w or wb 把文件截短至0,或为写而打开

a or ab 添加,为在文件尾写而打开,或为写而创建

r+ or r+b or rb+ 为读和写而打开

w+ or w+b or wb+ 把文件截短至0长,或为读和写而打开

a+ or a+b or ab+ 为在文件尾读和写而打开或创建


4.读写流
一次读一个字符
#include <stdio.h>

int getc(FILE *fp);

int fgetc(FILE *fp);

int getchar(void);

不管是出错还是到达文件尾端,这三个函数都返回同样的值。为了区分这两种情况必须用下面两个函数
#include <stdio.h>

int ferror(FILE *fp);

int feof(FILE *fp);

清除标志
void clearerr(FILE *fp);

从流中读取数据后,可以调用ungetc将字符再压送回流中
#include <stdio.h>

int ungetc(int c, FILE *fp);


每次输出一个字符的函数
#include <stdio.h>

int putc(int c, FILE *fp);

int fputc(int c, FILE *fp);

int putchar(int c);

每次一行函数
#include <stdio.h>

char *fgets(char *restrict buf, int n, FILE
*restrict fp);

char *gets(char *buf);


#include <stdio.h>

int fputs(const char *restrict str, FILE *restrict
fp);

int puts(const char *str);


二进制读写

#include <stdio.h>

size_t fread(void *restrict ptr, size_t size,
size_t nobj,
             FILE *restrict fp);

size_t fwrite(const void *restrict ptr, size_t
size, size_t nobj,
              FILE *restrict fp);


5.定位流


#include <stdio.h>

long ftell(FILE *fp);

Returns: current file position indicator if OK, 1L on error


int fseek(FILE *fp, long offset, int whence);

Returns: 0 if OK, nonzero on error


void rewind(FILE *fp);




#include <stdio.h>

off_t ftello(FILE *fp);




Returns: current file position indicator if OK, (off_t)1 on error


int fseeko(FILE *fp, off_t offset, int whence);



#include <stdio.h>

int fgetpos(FILE *restrict fp, fpos_t *restrict pos);

int fsetpos(FILE *fp, const fpos_t *pos);


6.格式化输出和输入
格式化输出
#include <stdio.h>

int printf(const char *restrict format, ...);

int fprintf(FILE *restrict fp, const char
*restrict format, ...);

format说明

%[flags][fldwidth][precision][lenmodifier]convtype

四种格式函数变体
#include <stdarg.h>
#include <stdio.h>

int vprintf(const char *restrict format, va_list arg);

int vfprintf(FILE *restrict fp, const char
*restrict format,
             va_list arg);




Both return: number of characters output if OK, negative value if output error


[View full width]
int vsprintf(char *restrict buf, const char
*restrict format,
             va_list arg);

int vsnprintf(char *restrict buf, size_t n,
              const char *restrict format, va_list
arg);








Both return: number of characters output if OK, negative value if output error


[View full width]
int sprintf(char *restrict buf, const char
*restrict format, ...);

int snprintf(char *restrict buf, size_t n,
             const char *restrict format, ...);

格式化输入

#include <stdio.h>

int scanf(const char *restrict format, ...);

int fscanf(FILE *restrict fp, const char *restrict
format, ...);

int sscanf(const char *restrict buf, const char
*restrict format,
           ...);
#include <stdarg.h>
#include <stdio.h>

int vscanf(const char *restrict format, va_list arg);

int vfscanf(FILE *restrict fp, const char
*restrict format,
            va_list arg);

int vsscanf(const char *restrict buf, const char
*restrict format,
            va_list arg);

7.临时文件
两个函数帮助创建临时文件


#include <stdio.h>

char *tmpnam(char *ptr);




Returns: pointer to unique pathname


FILE *tmpfile(void);

例:

#include "apue.h"

int
main(void)
{
    char    name[L_tmpnam], line[MAXLINE];
    FILE    *fp;

    printf("%s\n", tmpnam(NULL));       /* first temp name */

    tmpnam(name);                       /* second temp name */
    printf("%s\n", name);

    if ((fp = tmpfile()) == NULL)       /* create temp file */
        err_sys("tmpfile error");
    fputs("one line of output\n", fp);  /* write to temp file */
    rewind(fp);                         /* then read it back */
    if (fgets(line, sizeof(line), fp) == NULL)
        err_sys("fgets error");
    fputs(line, stdout);                /* print the line we wrote */

    exit(0);
}


#include <stdio.h>

char *tempnam(const char *directory, const char
*prefix);


#include <stdlib.h>

int mkstemp(char *template);

例:
#include "apue.h"

int
main(int argc, char *argv[])
{
    if (argc != 3)
        err_quit("usage: a.out <directory> <prefix>");

    printf("%s\n", tempnam(argv[1][0] != ' ' ? argv[1] : NULL,
      argv[2][0] != ' ' ?  argv[2] : NULL));

    exit(0);
}








  • 大小: 15.4 KB
分享到:
评论

相关推荐

    UNIX环境高级编程-005_标准IO库

    《UNIX环境高级编程》是一本深入探讨UNIX系统编程的电子书,共分为23个部分,涵盖19章。在这一章中,作者主要讲解了标准I/O库,这是一个在多个操作系统上广泛实现的库,由ANSI C标准定义。标准I/O库的设计目的是简化...

    Linux系统编程--文件IO1

    《TCP/IP 详解》(3卷),《UNIX网络编程》(2卷)参考书2:《Linux系统编程》RobertLoVe [美] 参考书3:《Linux/UNIX系统编

    Java网络编程--Unix域协议:实现

    `protosw`结构体(如图17-5所示)则包含了每个协议的操作函数指针,用于处理各种请求,如PRU_ATTACH、PRU_DETACH、PRU_BIND和PRU_CONNECT等。 17.4 至17.10 描述了Unix域协议控制块(unp PCB)的细节,以及各个函数...

    PyPI 官网下载 | sphinxcontrib-drawio-0.0.7.tar.gz

    标题 "PyPI 官网下载 | sphinxcontrib-drawio-0.0.7.tar.gz" 暗示我们讨论的是一个在Python Package Index (PyPI) 上发布的软件包,名为`sphinxcontrib-drawio`,版本号为0.0.7。这个包是以tar.gz格式提供的,这是...

    Java网络编程--Unix域协议:概述

    网络编程API标准IEEE POSIX 1003.1g(也称为POSIX.1g)中定义了对Unix域协议的支持,使用地址族AF_LOCAL(或PF_LOCAL),协议族为PF_LOCAL,替代了传统的AF_UNIX,使得这种协议不仅限于Unix系统,也扩展到了遵循...

    PyPI 官网下载 | ie-a-ia-io-0.1.2.tar.gz

    《PyPI官网下载:ie-a-ia-io-0.1.2.tar.gz——探索Python库的奥秘》 PyPI(Python Package Index)是Python世界中的一个重要组成部分,它是Python开发者分享和获取开源软件包的中心仓库。PyPI官网提供了一个方便的...

    commons-io-2.8.0.rar

    "commons-io-2.8.0.rar"是一个包含 Commons IO 库版本2.8.0的压缩包文件,便于开发者在项目中引用和使用。 在 Commons IO 中,我们可以找到许多有用的类和方法,这些在处理文件、流、字符集转换、读写操作等方面...

    UNIX系统标准IO应用编程.ppt

    1. **标准I/O库编程**:在UNIX系统中,标准I/O库(通常称为stdio.h库)提供了一系列函数,如fopen、fclose、fread、fwrite等,用于文本和二进制文件的读写操作。这些函数封装了低级的系统调用,简化了文件处理过程,...

    PyPI 官网下载 | platformio-3.2.1.tar.gz

    描述中提到的"platformio-3.2.1.tar.gz"是一个典型的Unix/Linux风格的归档文件,使用gzip压缩算法。这种格式在开源软件分发中非常常见,因为它能有效减小文件大小,便于传输和存储。解压后,用户将能够访问到...

    商业编程-源码-基于select IO模型的远程目录浏览与多线程文件下载.zip

    这里采用的是`select`模型,它是早期Unix系统中广泛使用的异步IO模型。`select`函数允许程序监控多个文件描述符(FDs),当这些FDs中的任何一个准备就绪时(即有数据可读或可写),`select`会返回,从而使程序能够...

    07-fileio.rar

    "07-fileio.rar"这个压缩包文件很可能包含了一本关于Linux和UNIX系统编程的手册的源码,这为我们深入学习这两个操作系统的I/O机制提供了宝贵的资源。下面,我们将详细探讨Linux和UNIX系统中的文件I/O。 1. **文件I/...

    PyPI 官网下载 | nionswift-io-0.15.0.tar.gz

    《PyPI官网下载 | nionswift-io-0.15.0.tar.gz:深入了解Python库的使用与管理》 PyPI(Python Package Index),全称为Python Package Index,是Python编程语言的官方软件仓库,提供了丰富的第三方库供开发者下载...

    IO-Compress-Base

    在Perl或其他编程语言中,IO-Compress-Base库提供了方便的API,使开发者能够创建和读取.zip文件。 3. **bzip2格式**:bzip2是一种高效的无损压缩算法,其压缩率通常高于传统的gzip。然而,它的压缩和解压缩速度较慢...

    Java语言编程-IO体系.pdf

    ### Java语言编程-IO体系知识点概述 #### 一、引言 Java的IO体系是Java编程中的重要组成部分,它提供了丰富的API用于实现文件操作、网络通信等功能。本篇将详细介绍Java IO体系的基础概念、核心类及接口,并通过...

    UNIX环境高级编程

    UNIX环境下的IO库包括标准输入输出库,如,以及提供底层文件操作和进程控制的库,如。这些库是进行UNIX系统编程的基础工具。使用标准输入输出库,可以通过文件描述符STDIN(标准输入)和STDOUT(标准输出)来读写...

    高级网络编程课件--东南大学

    《高级网络编程》是东南大学陶军教授主讲的一门课程,主要围绕UNIX网络编程的套接字(Socket)API进行深入讲解。这门课程旨在帮助学生和IT专业人士掌握网络通信的核心技术,以便设计和实现高效、可靠的网络应用程序...

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

    本书主要介绍了UNIX系统下的编程技术,强调了使用C语言进行系统编程的方法,是学习Linux和UNIX编程人员的必备书籍。 书中系统地讲解了UNIX系统编程的方方面面,包括文件和目录的操作、标准I/O库、系统数据文件和...

    [Unix编程环境]_EN.pdf

    根据提供的文件信息,我们可以从标题、描述以及部分可见的内容中提取出有关Unix编程环境的关键知识点。下面将对这些知识点进行详细的阐述。 ### Unix编程环境概述 #### 1. **Unix系统简介** - **起源与历史**:...

Global site tag (gtag.js) - Google Analytics