ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Linux C学习--getline()函数

2019-07-20 13:43:11  阅读:353  来源: 互联网

标签:函数 Linux qiang length ubuntu test line getline


转自:https://blog.csdn.net/zqixiao_09/article/details/50253883#commentsedit

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()一行一行的读取数据,下面我们做个小实验:首先创建一个文件,在文件中现实一些内容:
  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里面的内容:   执行程序如下:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main(void)
  4. {
  5. FILE * fp;
  6. char * line = NULL;
  7. size_t len = 0;
  8. ssize_t read;
  9. fp = fopen("/home/fs/qiang/getline/test/line.txt", "r");
  10. if (fp == NULL)
  11. exit(EXIT_FAILURE);
  12. while ((read = getline(&line, &len, fp)) != -1)
  13. {
  14. printf("Retrieved line of length %zu :\n", read);
  15. printf("%s", line);
  16. }
  17. if (line)
  18. free(line);
  19. exit(EXIT_SUCCESS);
  20. }
执行结果如下:
  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()操作,流自动打开。关于文件描述符和数据流的区别,后面会开文章专门写这一篇

标签:函数,Linux,qiang,length,ubuntu,test,line,getline
来源: https://blog.csdn.net/shenlong1356/article/details/96583172

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有