linux getline参数,Linux下的getline函数

最近在做国嵌的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文件中的内容

2c7756d22fd1ec988015568e2fb5d8d3.png

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

测试结果:

d3d6da3ba1f06a81379a2f1b08c61617.png

结果分析:

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 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值