GETLINE - Linux手册页
Linux程序员手册 第3部分
更新日期: 2020-06-09
名称
getline,getdelim-分隔字符串输入
语法
#include <stdio.h> ssize_t getline(char **lineptr, size_t *n, FILE *stream); ssize_t getdelim(char **lineptr, size_t *n, int delim, FILE *stream);
glibc的功能测试宏要求(请参阅feature_test_macros(7)):
getline(),getdelim():
- Since glibc 2.10:
- _POSIX_C_SOURCE>= 200809L
- Before glibc 2.10:
- _GNU_SOURCE
说明
getline()从流中读取整行,并将包含文本的缓冲区地址存储到* lineptr中。如果找到缓冲区,则该缓冲区以null终止,并包括换行符。
如果在调用之前将* lineptr设置为NULL并将* n设置为0,则getline()将分配一个缓冲区来存储该行。即使getline()失败,该缓冲区也应由用户程序释放。
另外,在调用getline()之前,* lineptr可以包含一个指向分配了malloc(3)的缓冲区的指针* n个字节。如果缓冲区的大小不足以容纳该行,则getline()使用realloc(3)调整其大小,并根据需要更新* lineptr和* n。
无论哪种情况,在成功调用后,* lineptr和* n都会更新以分别反映缓冲区地址和分配的大小。
getdelim()与getline()相似,但可以将除newline之外的行定界符指定为定界符参数。与getline()一样,如果在到达文件末尾之前输入中不存在分隔符,则不会添加分隔符。
返回值
成功时,getline()和getdelim()返回读取的字符数,包括定界符,但不包括终止空字节(aq \ 0aq)。该值可用于处理读取行中的嵌入式空字节。
如果无法读取行(包括文件结束条件),这两个函数都将返回-1。如果发生错误,则设置errno来指示原因。
错误说明
- EINVAL
- 错误的参数(n或lineptr为NULL,或流无效)。
- ENOMEM
- 行缓冲区的分配或重新分配失败。
属性
有关本节中使用的术语的说明,请参见attribute(7)。
Interface | Attribute | Value |
getline(),getdelim() | Thread safety | MT-Safe |
遵循规范
getline()和getdelim()最初都是GNU扩展。它们在POSIX.1-2008中进行了标准化。
示例
#define _GNU_SOURCE #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { FILE *stream; char *line = NULL; size_t len = 0; ssize_t nread; if (argc != 2) { fprintf(stderr, "Usage: %s <file>\n", argv[0]); exit(EXIT_FAILURE); } stream = fopen(argv[1], "r"); if (stream == NULL) { perror("fopen"); exit(EXIT_FAILURE); } while ((nread = getline(&line, &len, stream)) != -1) { printf("Retrieved line of length %zu:\n", nread); fwrite(line, nread, 1, stdout); } free(line); fclose(stream); exit(EXIT_SUCCESS); }
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。