putc , putchar , fputc 或 putw 子例程
用途
将字符或字写入流。
库
标准输入/输出软件包libc.a
语法
描述
putc和putchar宏将字符或单词写入数据流。 fputc和putw子程序的作用类似,但它们是真正的子程序。
putc宏将字符 Character(转换为无符号 char数据类型)写入Stream参数指定的输出。 如果定义了文件指针,该字符将写入文件指针当前指向的位置。
putchar宏与putc宏相同,只是putchar会写入标准输出。
fputc子程序的工作原理与putc宏相同,但fputc是一个真正的子程序,而不是宏。 它的运行速度比 "putc、慢,但每次调用占用的空间较少。
由于putc是作为宏实现的,它错误地处理了具有副作用的Stream参数,例如putc(C,*f++)。在这种情况下,请使用fputc子程序。 此外,如果需要将指向该子程序的指针作为参数传递给另一个子程序,请使用fputc。
为了与 ANSI 兼容, putc和putchar宏也作为子程序实现。 要访问子程序而不是宏,请在源文件开头插入#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_ctime和st_mtime字段标记为更新。
由于字长和字节排序可能存在差异,使用putw子程序编写的文件取决于机器,在不同的处理器上使用getw子程序可能无法读取。
除stderr 外,输出流如果指向文件,则默认为缓冲流;如果指向终端,则默认为行缓冲流。 标准错误输出流stderr 默认为非缓冲流,但使用freopen子程序会使其变为缓冲流或行缓冲流。 使用setbuf子程序更改数据流缓冲策略。
当输出流未缓冲时,信息一经写入,就会排队等待写入目标文件或终端。 缓冲输出流时,会将许多字符保存并写入为块。 当输出流采用行缓冲时,每一行输出完成后(即写入新行字符或请求终端输入时),都会立即排队写入目标终端。
参数
| 项 | 描述 |
|---|---|
| 流 | 指向打开文件的文件结构。 |
| 字符 | 指定要写入的字符。 |
| 单词 | 指定要写入的字 (不可移植,因为字长和字节排序与机器相关)。 |
返回值
成功完成后,这些函数将返回所写入的值。 如果这些函数失败,它们会返回常数 EOF。 如果流参数未打开供写入,或输出文件大小无法增大,则运行失败。 由于EOF值是一个有效整数,因此应使用ferror子程序来检测putw错误。
错误代码
如果数据流未缓冲或数据流缓冲区需要刷新,则fputc子程序将失败:
| 项 | 描述 |
|---|---|
| EAGAIN | 文件描述符底层Stream的O_NONBLOCK标志已被设置,进程将在写入操作中延迟。 |
| EBADF | Stream底下的文件描述符不是有效的文件描述符,无法打开供写入。 |
| EFBIG | 尝试写入的文件超过进程限制的文件大小或最大文件大小。 |
| EFBIG | 该文件是常规文件,尝试在最大偏移量或超出最大偏移量时写入。 |
| EINTR | 由于接收到信号,写操作已终止,并且未传输任何数据,或者实现未报告此文件的部分传输。 注:根据应用程序绑定的库例程,该子程序可能会返回EINTR。 请参阅有关sa_restart 的信号子程序。
|
| EIO | 发生物理 I/O 错误,或进程是后台进程组的成员,试图执行写子程序到其控制终端,TOSTOP标志已设置,进程既未忽略也未阻止SIGTTOU信号,进程的进程组已成为孤儿。 在依赖于实现的条件下也可能返回此错误。 |
| ENOSPC | 包含该文件的设备上没有剩余可用空间。 |
| EPIPE | 尝试写入未打开以供任何进程读取的管道或先进先出 (FIFO)。 同时还会向进程发送SIGPIPE信号。 |
如果出现以下情况,fputc子程序可能会失败
| 项 | 描述 |
|---|---|
| ENOMEM | 存储空间不足。 |
| ENXIO | 对不存在的设备发出了请求,或者该请求超出了该设备的能力范围。 |