putc , putchar , fputc 或 putw 子例程

用途

将字符或字写入流。

标准输入/输出软件包libc.a

语法

#include <stdio.h>
int putc ( Character,  Stream)
int Character;
FILE *Stream;

int putchar (Character)
int Character;

int fputc (Character, Stream)
int Character;
FILE *Stream;

int putw ( Word, Stream)
int Word;
FILE *Stream;

描述

putcputchar宏将字符或单词写入数据流。 fputcputw子程序的作用类似,但它们是真正的子程序。

putc宏将字符 Character(转换为无符号 char数据类型)写入Stream参数指定的输出。 如果定义了文件指针,该字符将写入文件指针当前指向的位置。

putchar宏与putc宏相同,只是putchar会写入标准输出。

fputc子程序的工作原理与putc宏相同,但fputc是一个真正的子程序,而不是宏。 它的运行速度比 "putc、慢,但每次调用占用的空间较少。

由于putc是作为宏实现的,它错误地处理了具有副作用的Stream参数,例如putc(C,*f++)。在这种情况下,请使用fputc子程序。 此外,如果需要将指向该子程序的指针作为参数传递给另一个子程序,请使用fputc

为了与 ANSI 兼容, putcputchar宏也作为子程序实现。 要访问子程序而不是宏,请在源文件开头插入#undef putc#undef putchar

putw子程序将Word参数指定的字(int数据类型)写入 Stream参数指定的输出。 该字写在文件指针 (如果定义) 指向的位置。 单词的大小是整数的大小,因机器而异。 putw子程序不会假定或导致文件中数据的特殊对齐方式。

After the fputcw, putwc, fputc, putc, 输入, 问题, or 把..... subroutine runs successfully, and before the next successful completion of a call either to the 冲洗 or 关闭 subroutine on the same stream or to the 出口 or 中止 subroutine, thest_ctimest_mtime字段标记为更新。

由于字长和字节排序可能存在差异,使用putw子程序编写的文件取决于机器,在不同的处理器上使用getw子程序可能无法读取。

stderr 外,输出流如果指向文件,则默认为缓冲流;如果指向终端,则默认为行缓冲流。 标准错误输出流stderr 默认为非缓冲流,但使用freopen子程序会使其变为缓冲流或行缓冲流。 使用setbuf子程序更改数据流缓冲策略。

当输出流未缓冲时,信息一经写入,就会排队等待写入目标文件或终端。 缓冲输出流时,会将许多字符保存并写入为块。 当输出流采用行缓冲时,每一行输出完成后(即写入新行字符或请求终端输入时),都会立即排队写入目标终端。

参数

描述
指向打开文件的文件结构。
字符 指定要写入的字符。
单词 指定要写入的字 (不可移植,因为字长和字节排序与机器相关)。

返回值

成功完成后,这些函数将返回所写入的值。 如果这些函数失败,它们会返回常数 EOF。 如果参数未打开供写入,或输出文件大小无法增大,则运行失败。 由于EOF值是一个有效整数,因此应使用ferror子程序来检测putw错误。

错误代码

如果数据流未缓冲或数据流缓冲区需要刷新,则fputc子程序将失败:

描述
EAGAIN 文件描述符底层StreamO_NONBLOCK标志已被设置,进程将在写入操作中延迟。
EBADF Stream底下的文件描述符不是有效的文件描述符,无法打开供写入。
EFBIG 尝试写入的文件超过进程限制的文件大小或最大文件大小。
EFBIG 该文件是常规文件,尝试在最大偏移量或超出最大偏移量时写入。
EINTR 由于接收到信号,写操作已终止,并且未传输任何数据,或者实现未报告此文件的部分传输。
注:根据应用程序绑定的库例程,该子程序可能会返回EINTR。 请参阅有关sa_restart信号子程序。
EIO 发生物理 I/O 错误,或进程是后台进程组的成员,试图执行子程序到其控制终端,TOSTOP标志已设置,进程既未忽略也未阻止SIGTTOU信号,进程的进程组已成为孤儿。 在依赖于实现的条件下也可能返回此错误。
ENOSPC 包含该文件的设备上没有剩余可用空间。
EPIPE 尝试写入未打开以供任何进程读取的管道或先进先出 (FIFO)。 同时还会向进程发送SIGPIPE信号。

如果出现以下情况,fputc子程序可能会失败

描述
ENOMEM 存储空间不足。
ENXIO 对不存在的设备发出了请求,或者该请求超出了该设备的能力范围。