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

函数原型

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

所需头文件

#include

参数

lineptr

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

n

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

stream

要读取文件的文件流

返回值

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

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

#include

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下利用ioctl函数获取网卡信息

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

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

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

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

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

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

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

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

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

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

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

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

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

Linux下clock计时函数学习

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

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

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

随机推荐

Eclipse遇到Initializing Java Tooling解决办法

可参考博客:http://liaojuncai.iteye.com/blog/1954113 打开Eclipse的时候莫名其妙的出现这个错误,进度条一直显示这个提示Initializing java ...

[Objective-c 基础 - 2.10] description方法

A. 实例对象打印-description 1.当使用NSLog函数并且使用%@占位符的时候,会调用对象的-description方法 2.拿到-description的返回值,显示到console中 ...

类似a:hover的伪类的注解

a:link { font-size: 14pt; text-decoration: underline; color: blue; } /*设置a对象在未被访问前的样式表属性 .*/ a:hover ...

Sipdroid实现SIP(四): 传输层和应用层之间的枢纽SipProvider

目录 一. 概述 二. 主要变量 三. 主要方法 四. 在Sipdroid中的应用 一. 概述 在整套Sipdroid源码中, 类SipProvider是最靠近TCP/UDP的一层, 在Sipdroi ...

Dubbo服务的搭建与使用

官方地址Dubbo.io Dubbo 主要功能 高并发的负载均衡,多系统的兼容合并(理解不深,不瞎掰了) Dubbo 主要组成有四部分 Zookeeper(服务注册中心) Consumer(服务消费方 ...

POST与PUT

POST和PUT都是HTTP中客户端向服务器发送请求的方法 POST : 向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件).数据被包含在请求本文中.这个请求可能会创建新的 资源或修改 ...

Python------mysql数据库

import pymysql #一.直接连接mysql数据库'''coon=pymysql.connect(host='192.168.*.*',user='root',password='12345 ...

.NET性能优化(文摘)

第1章 性能指标 1.1 性能目标 1.2 性能指标 第2章 性能度量 2.1 性能度量方式 白盒测试-小程序 黑盒测试-大型程序 2.2 Windows内置工具 2.2.1 性能计数器 2.2.2  ...

flask+socketio+echarts3 服务器监控程序(基于后端数据推送)

本文地址:http://www.cnblogs.com/hhh5460/p/7397006.html 说明 以前的那个例子的思路是后端监控数据存入数据库:前端ajax定时查询数据库. 这几天在看web ...

python webdriver api-操作日期元素的方法

操作日期元素 第一种方式直接向输入框输入日期 dateInputBox = self.driver.find_element_by_id("datepicker") dateInp ...

linux getline参数,Linux下的getline函数相关推荐

  1. 嵌入式Linux支持dlopen,Android下使用dlopen函数动态调用.so链接库

    在这篇文章([09.03.25]Linux环境中dlopen函数的简单应用)中.实现了在UBUNTU LINUX环境下使用dlopen函数动态调用.so链接库.但是也提到了在Android下未能成功. ...

  2. linux 启动 参数,Linux启动参数

    Linux启动参数 发布时间:2008-09-03 15:46:31来源:红联作者:Sednol linux noapic (跳过硬件检测) linux pci=noapic (跳过PCI卡部分硬件检 ...

  3. linux fping参数,linux下,fping命令与ping命令解析

    ping Linux系统的ping命令是常用的网络命令,它通常用来测试与目标主机的连通性. 1.命令格式: ping [参数] [主机名或IP地址] 2.命令功能: ping命令用于:确定网络和各外部 ...

  4. Linux aptget 参数,ubuntu下apt-get 命令参数大全

    Ubuntu下apt-get 命令参数大全,供大家参考. apt-cache search package  搜索包 apt-cache show package 获取包的相关信息,如说明.大小.版本 ...

  5. linux fg 参数,Linux的bg和fg命令简单介绍

    我们都知道,在 Windows 上面,我们要么让一个程序作为服务在后台一直运行,要么停止这个服务.而不能让程序在前台后台之间切换.而 Linux 提供了 fg 和 bg 命令,让我们轻松调度正在运行的 ...

  6. linux perf 参数,Linux perf命令详解及常用参数解析

    perf是Linux下的一款性能分析工具,能够进行函数级与指令级的热点查找. Perf List 利用perf剖析程序性能时,需要指定当前测试的性能时间.性能事件是指在处理器或操作系统中发生的,可能影 ...

  7. linux方法参数,Linux的sysctl 命令 参数

    Linux内核通过/proc虚拟文件系统向用户导出内核信息,用户也可以通过/proc文件系统或通过sysctl命令动态配置内核.比如,如果我们想启动NAT,除了加载模块.配置防火墙外,还需要启动内核转 ...

  8. linux 常用参数,Linux 常用命令及参数整理

    1.. cat  -t 2.. ls  -t -u 3.. uniq -c-u -d 4.. sort -k -u -t -f -n 5.. tail head 6.. rpm -q -ql -qf ...

  9. linux kvm参数,Linux KVM总结

    1.桥接配置文件如下: ifcfg-br0//第一个桥br0设置ip主要来管理宿主机. DEVICE=br0 //设备为br0 TYPE=Bridge //总类为桥接 BOOTPROTO=static ...

最新文章

  1. 新战场路在何方——详解360金融数据中台之旅
  2. android应用程序的混淆打包
  3. html华为官网静态网页,Web静态页面:华为商城主页
  4. jdk7默认gc算法_JDK 7的算法和数据结构
  5. hive mysql性能_Hive数据库安全审计功能
  6. css3弧形跑道效果_Css 实现漂亮弧形
  7. TensorFlow 保存和加载模型
  8. Lync 客户端功能对比之IM功能
  9. CodeVs天梯白银Silver题解
  10. BlogEngine
  11. 小甲鱼Python学习
  12. UnrealVS插件使用简介(UBT编译,UE4热更新)
  13. python win7 安装失败 Service Pack 1
  14. 微信小程序下载视频到相册(带进度条)
  15. DH算法 | 迪菲-赫尔曼Diffie–Hellman 密钥交换及RSA(学习笔记)
  16. 30 个纯 HTML5 实现的游戏
  17. ZYNQ图像处理|静态图像通路|VDMA寄存器、DDR内存操作
  18. Android 检测输入键盘是否弹起
  19. Linux 下如何添加一个普通用户,并给予用户root权限
  20. flex-direction column 宽度问题

热门文章

  1. 手机上支付宝沙箱环境安装
  2. Q1.UNITY2019设置中文
  3. 人群标签、手淘流量之间的关系,如何提高手淘流量?
  4. 教你用Python预测机票价格!
  5. 【CVPR2018】PSMNet:一个基于金字塔的端到端立体匹配网络
  6. python之写报文2
  7. Tortoisehg hg命令行工作方式详解
  8. validate中submitHandler采用ajaxsubmit导致表单重复提交
  9. Fikker CDN 搭建节点时,首次启动后不能激活试用期的问题。
  10. rkhunter(Rootkit猎手)安装使用