getline()函数是什么?百度百科这样解释:
getline不是C库函数,而是C++库函数。它会生成一个包含一串从输入流读入的字符的字符串,直到以下情况发生会导致生成的此字符串结束。1)到文件结束,2)遇到函数的定界符,3)输入达到最大限度。
linux标准C中使用条件:
#define _GNU_SOURCE
#include <stdio.h>
#include <stdio.h>
函数声明:
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
返回值
成功:返回读取的字节数。
失败:返回-1。
参数:
lineptr:指向存放该行字符的指针,如果是NULL,则有系统帮助malloc,请在使用完成后free释放。
n:如果是由系统malloc的指针,请填0
stream:文件描述符
那我们linux c中如何使用getline()函数呢?
C 有 fgets(), gets() 函数,也有getline.用于读取一行字符直到换行符,包括换行符。这个和我们前面那篇关于标准输入输出函数
流与缓冲区那篇中内容有联系,
printf() scanf() 属于行缓冲,读取一行数据(遇到'
')便会刷新。
我们可以利用getline()一行一行的读取数据.
我的config文件下有这几行数据: 1700003137 1700003137.pem GUID_file[1700003137001342].txt licence.sign.file[1700003137001342].txt
#include <stdio.h> #include <stdlib.h> int main(void) { FILE * fp; char * line = NULL; size_t len = 0; ssize_t read; fp = fopen("./data/config", "r"); if (fp == NULL) exit(EXIT_FAILURE); while ((read = getline(&line, &len, fp)) != -1) {//一行一行读,读完一行,直接跳到下一行 // printf("Retrieved line of length %zu : ", read); line[read-1]=' ';//将换行符' '替换成 ' ' printf("%s", line); } //判断 line 是否为空指针,如果不是需要释放 if (line) free(line); exit(EXIT_SUCCESS); }
运行结果如下:
17000031371700003137.pemGUID_file[1700003137001342].txtlicence.sign.file[1700003137001342].txt
#include <stdio.h> #include <stdlib.h> int main(void) { FILE * fp; char * line = NULL; size_t len = 0; ssize_t read; fp = fopen("./data/config", "r"); if (fp == NULL) exit(EXIT_FAILURE); while ((read = getline(&line, &len, fp)) != -1) { // printf("Retrieved line of length %zu : ", read); // line[read-1]=' '; printf("%s", line); } if (line) free(line); exit(EXIT_SUCCESS); }
运行结果如下:
1700003137 1700003137.pem GUID_file[1700003137001342].txt licence.sign.file[1700003137001342].txt
参考:http://blog.csdn.net/zqixiao_09/article/details/50253883