put 或 fput 子例程
用途
将字符串写入流。
库
标准 I/O 库 (libc.a)
语法
描述
put 子例程将 String 参数指向的字符串写入标准输出流 stdout,并将换行符附加到输出。
fput 子例程将 String 参数指向的以 null 结束的字符串写入由 Stream 参数指定的输出流。 fput 子例程不附加换行符。
两个子例程都不写入终止空字符。
在 fputwc, putwc, fputc, fput, put或 putw 子例程成功运行之后,在下一次成功完成对同一流上的 fflush 或 fclose 子例程的调用或对 exit 或 abort 子例程的调用之前,st_ctime和st_mtime将该文件的字段标记为待更新。
参数
| 项 | 描述 |
|---|---|
| String | 指向要写入输出的字符串。 |
| 流 | 指向打开文件的 FILE 结构。 |
返回值
成功完成后, put 和 fput 子例程将返回写入的字符数。 否则,两个子例程都将返回 EOF,为流设置错误指示符并设置 errno 全局变量以指示错误。 如果例程尝试写入尚未打开以进行写入的文件,那么会发生此情况。
错误代码
如果 put 或 fput 子例程失败,因为 Stream 参数指定的输出流未缓冲或需要清空缓冲区,那么它将返回以下一个或多个错误代码:
| 项 | 描述 |
|---|---|
| 再次 | 指示为 Stream 参数指定的文件描述符设置了 O_NONBLOCK 标志,并且进程将在写操作中延迟。 |
| EBADF | 指示由 Stream 参数指定的文件描述符不是打开以进行写入的有效文件描述符。 |
| EFBIG | 指示尝试写入超过进程的文件大小限制或系统范围的最大文件大小的文件。 |
| EINTR | 指示由于接收到信号而终止了写操作,并且未传输任何数据。 注: 根据应用程序绑定到的库例程,此子例程可能返回 EINTR。 请参阅有关 SA_RESTART 位的 signal 子例程。
|
| EIO | 指示该进程是尝试对其控制终端执行写操作的后台进程组的成员,设置了 TOSTOP 标志,该进程既不忽略也不阻塞 SIGTTOU 信号,并且该进程的进程组没有父进程。 |
| ENOSPC | 指示包含 Stream 参数指定的文件的设备上没有剩余可用空间。 |
| EPIPE | 指示尝试写入未打开以供任何进程读取的管道或先进先出 (FIFO)。 还将向进程发送 SIGPIPE 信号。 |
| ENOMEM | 指示存储空间不足。 |
| ENXIO | 指示请求是由不存在的设备发出的,或者请求超出了设备的能力范围。 |