[置顶] linux getline()函数
2024-08-29 15:02:04
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() 属于行缓冲,读取一行数据(遇到'\n')便会刷新。
我们可以利用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 :\n", read);
line[read-1]='\0';//将换行符'\n'替换成 '\0'
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 :\n", read);
// line[read-1]='\0';
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
最新文章
- (转)C++语言的15个晦涩特性
- express实现前后端通信上传图片,存储数据库(mysql)傻瓜教程(三)完结篇
- Andriod SDK Manager 安装问题解决方法
- iOS8后core location框架启动定位服务的步骤
- 多线程编程3 - GCD
- apache中.htaccess不起作用
- eclipse下使用API操作HDFS
- ssh连接失败解决方法
- c# in depth之泛型的实现
- sql点滴40—mysql乱码问题总结
- 【Unity与23种设计模式】状态模式(State)
- 论Activity及启动模式,Fragment,Service的使用以及生命周期
- 在docker上运行.net core程序
- 解析key值不确定的json数据
- Linux基础之常用命令整理(一)
- Docker 简介,入门
- 基于Spring Boot的微服务搭建
- 转自知乎大神---什么是 JS 原型链?
- Linux+Redis实战教程_day03_4、通用redis命令【重点】
- #Alpha Scrum6