最近在做国嵌的mp3项目,在mp3主控程序中用到了这个函数,挺好使的,在这里记录一下。注意是linux下的,不是C++中的。

函数原型

  ssize_t getline(char **lineptr, size_t *n, FILE *stream);

所需头文件

  #include <stdio.h>

参数

  lineptr

    字符串,getline函数会给它分配一段空间,用来存储读取出来的行内容

  n

    整型数字,函数调用完后会把分配的空间大小信息记录在n中。这个参数有些鸡肋,在调用getline之前对它进行任何操作都没什么意义,它只会在调用结束后记录lineptr    空间的大小。

  stream

    要读取文件的文件流

返回值

  成功的话返回读取到行内容的大小,失败的话返回-1。

那废话不多说,直接上测试代码

#include <stdio.h>

int main()
{
FILE *fd;
char *lineptr = NULL;      //一般对其赋值为空
size_t n = ;         //为了测试将其初值赋为121,其实没什么意义,后面的测试结果可以看出
int num;             //记录getline的返回值
fd = fopen("list","r");   if(fd == NULL)          //检查打开文件是否成功
{
perror("open list");
return ;
} while((num = getline(&lineptr,&n,fd)) != -)    //成功读取的话进入循环
printf("n = %d,num = %d,this line is %s",n,num,lineptr);    return ;
}

在给出执行结果前,我们先看看list文件中的内容

这里为了测试,丧心病狂的给第一行输了这么多,可读性什么的先到一边去吧~~

测试结果:

结果分析:

  1、可以看到,除了第一行,其余几行的n值都是120。这是因为,linux开始会给lineptr分配一个大小为120的空间,如果够就是这么多,n就等于120了。如果不够,linux会根据这一行的大小重新分配。所以嘛,说n鸡肋是有原因的~

  2、忽略第一行,看别的。a  r  m  3,貌似只有4个字符嘛,为什么num是5?回头看我们的测试代码中的打印函数

  printf("n = %d,num = %d,this line is %s",n,num,lineptr);

  注意,这里在%s后面并没有加上“\n”换行符,为什么测试结果却出现了换行?相信你们已经猜到了,这一行的内容不仅有arm3这些字符,还有最后面的一个换行符,所以num比我们数到的多了1,就是因为我们没有算上这个看不到的换行符。

  3、使用完后,为了避免空间浪费,我们要把分配出的空间free掉

  

if(lineptr != NULL)
{
free(lineptr);
}

  4、关于自动换行,我猜想有一个行指针,每次调用完getline后会自动增加,直到读取完所有的行。不过接触不到内核代码也说不准,暂且先这么认为吧。如果有知道的请不吝赐教。

  

如果有疑问或错误,欢迎指出。

Linux下的getline函数的更多相关文章

  1. Linux下利用ioctl函数获取网卡信息

    linux下的ioctl函数原型如下: #include <sys/ioctl.h> int ioctl(int handle, int cmd, [int *argc, int argv ...

  2. 【C/C++】Linux下使用system()函数一定要谨慎

    [C/C++]Linux下使用system()函数一定要谨慎 http://my.oschina.net/renhc/blog/53580 曾经的曾经,被system()函数折磨过,之所以这样,是因为 ...

  3. Linux下系统时间函数、DST等相关问题总结(转)

    Linux下系统时间函数.DST等相关问题总结 下面这个结构体存储了跟时区相关的位移量(offset)以及是否存在DST等信息,根据所在的时区信息,很容易找到系统时间与UTC时间之间的时区偏移,另外根 ...

  4. 【转】在嵌入式Linux和PC机Linux下使用popen函数时,程序运行结果有差异。

    下面程序演示了在嵌入式Linux和PC机Linux下使用popen函数时,程序的运行结果是有差异的. 两个程序 atest.c 和 btest.c,atest 检查是否有 btest 进程运行,如果没 ...

  5. linux下实现rm()函数删除文件或目录

    转载请注明原创:http://www.cnblogs.com/StartoverX/p/4600866.html 在linux下有两个函数可以用来删除文件: #include <unistd.h ...

  6. linux下实现ls()函数遍历目录

    转载请注明原创:http://www.cnblogs.com/StartoverX/p/4600794.html 需求:在linux下遍历目录,输出目录中各文件名. 在linux下遍历目录的相关函数有 ...

  7. Linux下clock计时函数学习【转】

    转自:https://www.cnblogs.com/wfwenchao/p/5195022.html 平时在Linux和Winows下都有编码的时候,移植代码的时候免不了发现一些问题.1. 你到底准 ...

  8. Linux下clock计时函数学习

    平时在Linux和Winows下都有编码的时候,移植代码的时候免不了发现一些问题.1. 你到底准不准?关于clock()计时函数首先是一段简单的测试代码,功能为测试从文本文件读取数据并赋值给向量最后打 ...

  9. Linux下利用signal函数处理ctrl+c等信号

    前言 linux下能够通过信号机制来实现程序的软中断,是一个很实用的编程方法. 我们平时在程序执行的时候按下ctrl-c.ctrl-z或者kill一个进程的时候事实上都等效于向这个进程发送了一个特定信 ...

随机推荐

  1. Referenced file contains errors (http://tiles.apache.org/dtds/tiles-config_3_0.dtd)

    java开发时遇到的问题,之前还是好好的,没有错误提示.可是今天一打开项目就出现这种问题.真不知道是怎么回事,在这里求助.错误如下: Referenced file contains errors ( ...

  2. Badge分析&如何逼死处女座

    Badge分析 所谓Badge,原本是iOS上的一个效果,但是被Android抄的多了,也就成了Android的标配.图就不上了,大家都懂的. 应用icon显示角标实际上是在Launcher中实现的, ...

  3. JSON 解析(门店)

    package com.j1.mai.action; import java.io.BufferedReader; import java.io.IOException; import java.io ...

  4. Day10 - Python协程、异步IO、redis缓存、rabbitMQ队列

    Python之路,Day9 - 异步IO\数据库\队列\缓存   本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 Python连接Mysql数据库操作 RabbitM ...

  5. Canvas transform浅析

    没有前奏,直接进入主题 transform调用方法: ctx.transform(a,b,c,d,e,f);如下 var ctx = document.getElementById("myC ...

  6. break、continue和goto 三者作用介绍

    跳跃语句 由于break.continue和goto语句有助于跳跃到代码中的某个特定语句,因此它们属于跳跃语句.下面是这三个语句的介绍. ①break语句 这个语句常与switch语句联合使用:但是, ...

  7. (Error) The type AESKeyGenerator is not accessible due to restriction on required library.

    error for 'Access restriction: The type AESKeyGenerator is not accessible due to restriction on requ ...

  8. c#读取通达信历史数据的方法

    public Bar ReadBarMin(BinaryReader br, int instrumentId, long size) { int date = br.ReadUInt16(); in ...

  9. 『重构--改善既有代码的设计』读书笔记----Extract Method

    在编程中,比较忌讳的一件事情就是长函数.因为长函数代表了你这段代码不能很好的复用以及内部可能出现很多别的地方的重复代码,而且这段长函数内部的处理逻辑你也不能很好的看清楚.因此,今天重构第一个手法就是处 ...

  10. 织梦dedecms网站六大SEO优化技巧(转帖)

    一个排名好的网站离不开好的cms,当然不同cms各有各的好处,因此我们在上线新网站的时候,要针对不同的情况因地制宜,选择不同的网站管理系统来做seo优化,现在使用比较流行的cms是织梦dedecms, ...