IO 函数

作者: shelldon1024 | 来源:发表于2020-02-09 00:15 被阅读0次

C 语言标准库函数

函数声明 说明 注意 安全性
int getc(FILE *stream); getc 与 fgetc 几乎一致,区别在于 getc 为宏,fgetc 为函数,一般来说宏产生较大的代码,但是避免了函数调用的堆栈操作,所以速度会比较快,而宏展开可能对其参数有不止一次的调用,为了保险起见不能使用带有 side effects 的参数,由此可见使用 fgetc 比 getc 要安全。 side effects ⚠️
int getchar(void); 调用时如果 stdin 内有字符,则取出 stdin 中的第一个字符返回;否则阻塞等待用户输入,直到用户输入 '\n' 或者 ^D (EOF) 停止输入(flush),'\n' 会插入到 stdin 中,EOF 不会插入到 stdin 中,若此时 stdin 内有字符,则取出 stdin 中的第一个字符返回,否则返回 EOF (-1) 。相当于 getc(stdin)。 -
int fgetc(FILE *stream); 见 getc。 -
char *gets(char *s); 若 stdin 为空,等待用户输入,直到用户输入 '\n' 或 ^D (EOF) 停止输入(flush),<u>'\n' 会被换成空字符 '\0'</u>,stdin 的 str 和 '\0' 流入缓冲区 s,如果 strlen(str) 大于 sizeof(s) 会破坏程序堆栈导致程序崩溃,如果调用成功则返回缓冲区指针 s。Never use this function! 缓冲区溢出
char *fgets(char *s, int size, FILE *stream); 若 stdin 为空,等待用户输入,直到用户输入 '\n' 或 ^D (EOF) 停止输入(flush),'\n'会插入到 stdin 中,EOF 不会插入到 stdin 中,stdin 流入缓冲区 s 的字符数最多为 size-1 个,自动在第 size 个位置补上 '\0',共 size 个字符。如果 size > sizeof(s),当 stdin 含有足够多字符时会破坏程序堆栈导致程序崩溃。所以最好取值 size=sizeof(s),即等于缓冲区大小。fgets 比 gets 要安全。 size 不能大于缓冲区s大小 ⚠️
int putc(int c, FILE *stream); putc 与 fputc 几乎一致,区别在于 putc 为宏,fputc 为函数,一般来说宏产生较大的代码,但是避免了函数调用的堆栈操作,所以速度会比较快,而宏展开可能对其参数有不止一次的调用,为了保险起见不能使用带有 side effects 的参数,由此可见使用 fputc 比 putc 要安全。 side effects ⚠️
int putchar(int c); 相当于 putc(c, stdout)。 -
int fputc(int c, FILE *stream); 见 putc。 -
int puts(const char *s); 将字符串 s 写入到 stdout,<u>'\0' 会被换成 '\n'并写入</u>。 -
int fputs(const char *s, FILE *stream); 将字符串 s 写入到 stream。 -
int scanf(const char *format, ...); 从 stdin 格式化读取数据。 -
int fscanf(FILE *stream, const char *format, ...); 从 stream 格式化读取数据。 -
int sscanf(const char *str, const char *format, ...); 从字符串数组 str 格式化读取数据。 -
int printf(const char *format, ...); 格式化字符串输出到 stdout。 -
int fprintf(FILE *stream, const char *format, ...); 格式化字符串输出到 stream。 -
int sprintf(char *str, const char *format, ...); 格式化字符串复制到缓冲区 str(字符串数组)中,如果格式化字符串长度大于 sizeof(str) 即缓冲区大小,会破坏程序堆栈导致程序崩溃。 缓冲区溢出
int snprintf(char *str, size_t size, const char *format, ...); 与 sprintf 类似,但是可以指定 size 从格式化字符串最多取前 size-1 个字符加一个空字符 '\0' 复制到缓冲区 str。应取值 size = sizeof(str)。 size 不能大于缓冲区str的大小 ⚠️
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); 从 stream 读取最多 nmemb 个(每个 size 字节大小)数据项存储到缓冲区 ptr 。如果缓冲区 ptr 不足够大,可能会发生缓冲区溢出。如果调用成功则返回读取到的数据项个数。 size 和 nmemb 的取值大小 ⚠️
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); 将缓冲区 ptr 中 nmemb 个 (每个 size 字节大小)数据项写入到 stream。如果调用成功则返回写入成功的数据项个数。 -

Linux 系统调用

函数声明 说明 注意 安全性
ssize_t read(int fd, void *buf, size_t count); 从文件 fd 中取最多 count 个字符存放在缓冲区 buf 中。该函数的返回值为读取到的字节数。如果 count > sizeof(buf) 可能发生缓冲区溢出。 cout 的取值大小 ⚠️
ssize_t write(int fd, const void *buf, size_t count); 将缓冲区 buf 中 count 个字节写入到文件 fd。 -

更新:
fgets: On linux Ctrl-D only works when the buffer is already empty otherwise it just flushes it. Therefore unless you have pressed enter without any characters after that, you will have to press Ctrl-D twice.

相关文章

  • IO 函数

    C 语言标准库函数 函数声明说明注意安全性int getc(FILE *stream);getc 与 fgetc ...

  • haskell IO

    1,IO类型:跟IO相关的函数返回值放到IO类型容器里,避免跟pure函数混合 Haskell has a spe...

  • 11.标准IO库

    标准IO和文件IO有什么区别 看起来使用时都是函数,但是:标准IO是C库函数,而文件IO是linux系统的API ...

  • python画出激活函数 sigmoid,tanh,Relu

    sigmoid函数 tanh函数![tanh函数](http://upload-images.jianshu.io...

  • C语言学习 day6

    库函数 -IO函数printf scanf getchar putchar-字符...

  • Android IO 函数

    只说安卓5.0以上: faccessat&access:(判断文件使用权限的函数) 调用open函数时,是以有效用...

  • IO函数一

    【1】什么是I/O #include std:表示标准standard I:input 输入 O:outp...

  • Linux 文件IO 和 标准IO

    [TOC] Linux 文件IO 和 标准IO Linux 文件IO Linux中做文件IO最常用到的5个函数是:...

  • select、poll、epoll详解

    IO读写基本原理 用户程序进行IO操作实际依赖于linux系统内核read()、write()函数read()函数...

  • 异步 IO,多路复用学习+生成器/协程

    异步 IO:遇到 IO 请求不等待,IO 请求完成后自动调用回调函数即可。IO 多路复用:监听多个 socket ...

网友评论

      本文标题:IO 函数

      本文链接:https://www.haomeiwen.com/subject/nohvxhtx.html