Linux C学习--getline()函数

getline()函数是什么?百度百科这样解释:

getline不是C库函数,而是C++库函数。它会生成一个包含一串从输入流读入的字符的字符串,直到以下情况发生会导致生成的此字符串结束。1)到文件结束,2)遇到函数的定界符,3)输入达到最大限度。
linux标准C中使用条件:
#define _GNU_SOURCE
#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()一行一行的读取数据,下面我们做个小实验:首先创建一个文件,在文件中现实一些内容:
[cpp] view plaincopy
  1. fs@ubuntu:~/qiang/getline$ mkdir test  
  2. fs@ubuntu:~/qiang/getline$ cd test/  
  3. fs@ubuntu:~/qiang/getline/test$ ls  
  4. fs@ubuntu:~/qiang/getline/test$ touch xiao  
  5. fs@ubuntu:~/qiang/getline/test$ touch qiang  
  6. fs@ubuntu:~/qiang/getline/test$ touch zhi  
  7. fs@ubuntu:~/qiang/getline/test$ touch hello  
  8. fs@ubuntu:~/qiang/getline/test$ touch world  
  9. fs@ubuntu:~/qiang/getline/test$ ls  
  10. hello  qiang  world  xiao  zhi  
  11. fs@ubuntu:~/qiang/getline/test$ ls >line.txt  
  12. fs@ubuntu:~/qiang/getline/test$ ls  
  13. hello  line.txt  qiang  world  xiao  zhi  
  14. fs@ubuntu:~/qiang/getline/test$   
看看line.txt里面的内容:
执行程序如下:
[cpp] view plaincopy
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3.   
  4. int main(void)  
  5. {  
  6.     FILE * fp;  
  7.     char * line = NULL;  
  8.     size_t len = 0;  
  9.     ssize_t read;  
  10.     fp = fopen("/home/fs/qiang/getline/test/line.txt""r");  
  11.     if (fp == NULL)  
  12.         exit(EXIT_FAILURE);  
  13.     while ((read = getline(&line, &len, fp)) != -1)  
  14.     {  
  15.         printf("Retrieved line of length %zu :\n", read);  
  16.         printf("%s", line);  
  17.     }  
  18.     if (line)  
  19.         free(line);  
  20.     exit(EXIT_SUCCESS);  
  21. }  
执行结果如下:
[cpp] view plaincopy
  1. fs@ubuntu:~/qiang/getline$ gcc -o getline getline.c   
  2. fs@ubuntu:~/qiang/getline$ ./getline   
  3. Retrieved line of length 6 :  
  4. hello  
  5. Retrieved line of length 9 :  
  6. line.txt  
  7. Retrieved line of length 6 :  
  8. qiang  
  9. Retrieved line of length 6 :  
  10. world  
  11. Retrieved line of length 5 :  
  12. xiao  
  13. Retrieved line of length 4 :  
  14. zhi  

对比一下line.txt中的内容,可以看到每一行都被正确的读取;。
这里简单提一下fopen()函数,fopen()函数是基于数据流的I/O操作中,用来打开一个文件,或者说打开一个数据流,打开数据流以后,就可以对数据流继续拧输入和输出的操作。C语言中stdin、stdout、stderr分别是标准输入流、标准输出流及标准出错流的逻辑目的,他们都默认对应相应的物理终端。在程序运行伊始,不需要进行open()操作,流自动打开。关于文件描述符和数据流的区别,后面会开文章专门写这一篇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/402448.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac10.14.4 独立显卡 影驰GTX 760 4GB成功驱动

先了解下这篇文章: https://blog.csdn.net/JoeBlackzqq/article/details/39612351 这是我的硬件配置! 当初装10.14.4时, 看网上文章说我的独显是无法驱动的,所以当时用的是我的核显(CPU i7-4770k HD4600)装上的. 但是在系统稳定的跑了个把月后,不知什么原因(一阵电流声), 我…

在Windows上编译MongoDB C Driver

2019独角兽企业重金招聘Python工程师标准>>> Mongodb 是采用 Scons 来构建的。Scons是一个Python写的自动化构建工具&#xff0c;从构建这个角度说&#xff0c;它跟GNU make是同一类的工具。所以要编译MongoDB的C语言驱动&#xff0c;不仅要有C/C开发环境&#xff0…

异常处理_Maven之web项目java.lang.LinkageError

浏览器运行项目异常如下: HTTP Status 500 -type Exception reportmessagedescription The server encountered an internal error () that prevented it from fulfilling this request.exceptionjava.lang.LinkageError: loader constraint violation: when resolving interfa…

Linux内核代码风格

Linux内核代码风格 这是一个简短的文档&#xff0c;描述了linux内核的首选代码风格。代码风格是因人而异的&#xff0c;而且我不愿意把我的观点强加给任何人&#xff0c;不过这里所讲述的是我必须要维护的代码所遵守的风格&#xff0c;并且我也希望绝大多数其他代码也能遵守这个…

ant-design table 分页(tableProps)

From: https://www.cnblogs.com/crazycode2/p/9704382.html 1.布局 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <Table dataSource{this.state.tableDetailList} scroll{{ y: 200px }} style{{tableLayout: fixed}} pagination{{ pageSize: 12 }} columns{columns1} r…

pyramid新建项目

2019独角兽企业重金招聘Python工程师标准>>> 例子&#xff1a;本项目在D盘 (1) C&#xff1a;\Users\Adminstrator>D: #进入到D盘 (2) D:>mkdir test #新建目录test (3) D&#xff1a;\cd test #进入test目录 (4) D:\test>pcreate -s starter myproject #新…

Linux环境下段错误的产生原因及调试方法小结

LZ看到一篇关于Linux环境段错误的产生原因的文章&#xff0c;感觉不错&#xff0c;但不是C博客里面&#xff0c;不知如何转载&#xff0c;这里转贴过来&#xff0c;感谢原博主&#xff0c;文章如下: Linux环境下段错误的产生原因及调试方法小结 1. 段错误是什么 一句话来说&am…

【BZOJ3036】绿豆蛙的归宿 拓补排序+概率

【BZOJ3036】绿豆蛙的归宿 Description 随着新版百度空间的下线&#xff0c;Blog宠物绿豆蛙完成了它的使命&#xff0c;去寻找它新的归宿。 给出一个有向无环的连通图&#xff0c;起点为1终点为N&#xff0c;每条边都有一个长度。绿豆蛙从起点出发&#xff0c;走向终点。到达每…

cnpm与npm的区别

From: https://blog.csdn.net/chi1130/article/details/72773278 npm介绍 说明&#xff1a;npm&#xff08;node package manager&#xff09;是nodejs的包管理器&#xff0c;用于node插件管理&#xff08;包括安装、卸载、管理依赖等&#xff09; 使用npm安装插件&#xff1…

Linux C 学习 单向链表

最近从Linux C数据结构和算法学起&#xff0c;下面是一个单向链表的写法&#xff0c;代码如下&#xff1a; [cpp] view plaincopy #include <stdio.h> #include <malloc.h> int n0; typedef struct code { int data; struct code *next; }Li…

《C专家编程》第二章——这不是Bug,而是语言特性

无论一门语言有多么流行或多么优秀&#xff0c;它总是存在一些问题&#xff0c;&#xff23;语言也不例外。本章讨论的重点是&#xff23;语言本身存在的问题&#xff0c;作者煞费苦心的用一个太空任务和软件的故事开头&#xff0c;也用另一个太空任务和软件的故事结尾&#xf…

数组与指针的恩怨

1、数组的本质 &#xff08;1&#xff09;、一种构造类型&#xff0c;&#xff08;2&#xff09;、相同类型的连续分配内存&#xff0c;&#xff08;3&#xff09;、数组的大小为sizeof(type)*array_size&#xff08;模子type[ ]大小&#xff09;,&#xff08;4&#xff09;、数…

path.join 和 path.resolve的区别

path.join path.join() 方法使用平台特定的分隔符把全部给定的 path 片段连接到一起&#xff0c;并规范化生成的路径。 path.join([...paths]);...paths string类型 path.join(__dirname, ./02art-template.js); // C:\Users\liangliang17\Desktop\Node_study\Node\5.path\02…

[转载]如何将Putty生成的PrivateKey转换为SecureCRT所需的PublicKey

为什么80%的码农都做不了架构师&#xff1f;>>> 首先说明&#xff0c;标题不一定准确&#xff0c;因为盆地并未详细了解清楚这里的公钥、私钥机制&#xff0c;只是根据以前的印象有个大概的理解&#xff0c;且最终以解决问题为主要目的&#xff0c;并未深究。标题的…

Linux c 算法与数据结构--双向链表

链表是linux c中非常重要的数据结构&#xff0c;双向链表与单向链表的区别&#xff0c;是它每个节点有两个指针域&#xff0c;分别指向该节点的前一个节点与后一个节点&#xff1b; 而链表的操作主要是查询、插入、删除、遍历等&#xff0c;下面来看一个双向链表&#xff0c;主…

执行shell出现bad interpreter

执行shell出现bad interpreter:No such file or directory linux执行shell出现bad interpreter:No such file or directory的原因是文件格式的问题。这个文件是在Windows下编写的。换行的方式与Unix不一样&#xff0c;但是在VI下面如果不Set一下又完全看不出来。 解决方法&…

exports、module.exports和export、export default到底是咋回事

前言 难得有空&#xff0c;今天开始重新规范的学习一下node编程。 但是引入模块我看到用 require的方式&#xff0c;再联想到咱们的ES6各种export 、export default。 阿西吧&#xff0c;头都大了.... 头大完了&#xff0c;那我们坐下先理理他们的使用范围。 require: node …

linux自动备份网站和数据库,到另外服务器上,为当前用户创建定时任务

2019独角兽企业重金招聘Python工程师标准>>> 两台服务器111&#xff0c;和117服务器,每天完成111服务器上网站和数据库自动备份到117服务器上 1&#xff1a;我的111服务器上是当前用户&#xff1a;sx A: 查看当前用户的计划任务&#xff1a;crontab -l是查看当前…

自定义控件三部曲之动画篇(一)——alpha、scale、translate、rotate、set的xml属性及用法...

前言&#xff1a;这几天做客户回访&#xff0c;感触很大&#xff0c;用户只要是留反馈信息&#xff0c;总是一种恨铁不成钢的心态&#xff0c;想用你的app&#xff0c;却是因为你的技术问题&#xff0c;让他们不得不放弃&#xff0c;而你一个回访电话却让他们尽释前嫌&#xff…

Linux c 算法与数据结构--栈

前段时间写了双向链表&#xff0c;现在写个栈&#xff0c;写之前&#xff0c;先简单介绍链表 队列  栈的区别&#xff1a; 链表&#xff0c;队列&#xff0c;堆栈的区别 1、栈是个有底的口袋&#xff0c;像袜子。 队列是没底的口袋&#xff0c;像通心粉。 所以&#xff1a;栈…