• [置顶] linux 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() 属于行缓冲,读取一行数据(遇到' ')便会刷新。
     
    我们可以利用getline()一行一行的读取数据.

    我的config文件下有这几行数据:
    
    1700003137
    1700003137.pem
    GUID_file[1700003137001342].txt
    licence.sign.file[1700003137001342].txt
    

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
    	FILE * fp;
    	char * line = NULL;
    	size_t len = 0;
    	ssize_t read;
    	fp = fopen("./data/config", "r");
    	if (fp == NULL)
    		exit(EXIT_FAILURE);
    	while ((read = getline(&line, &len, fp)) != -1)
    	{//一行一行读,读完一行,直接跳到下一行
    //		printf("Retrieved line of length %zu :
    ", read);
    		line[read-1]='';//将换行符'
    '替换成 ''
    		printf("%s", line);
    	}
    	//判断 line 是否为空指针,如果不是需要释放
    	if (line)
    		free(line);
    	exit(EXIT_SUCCESS);
    }

    运行结果如下:
    17000031371700003137.pemGUID_file[1700003137001342].txtlicence.sign.file[1700003137001342].txt


    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
            FILE * fp;
            char * line = NULL;
            size_t len = 0;
            ssize_t read;
            fp = fopen("./data/config", "r");
            if (fp == NULL)
                    exit(EXIT_FAILURE);
            while ((read = getline(&line, &len, fp)) != -1)
            {
    //              printf("Retrieved line of length %zu :
    ", read);
    //              line[read-1]='';
                    printf("%s", line);
            }
            if (line)
                    free(line);
            exit(EXIT_SUCCESS);
    }
    

    运行结果如下:
    1700003137
    1700003137.pem
    GUID_file[1700003137001342].txt
    licence.sign.file[1700003137001342].txt
    


    参考:http://blog.csdn.net/zqixiao_09/article/details/50253883





  • 相关阅读:
    android四大组件之contentprovider
    android自定义控件及自定义组合控件
    android四大组件之activity
    监听鼠标滚动事件,如滚动鼠标出现返回顶部按钮
    滚动鼠标出现某一元素
    checked 选择框选中
    原生JS一些操作
    闭合浮动的方法css
    合理提升WEB前端性能
    JS数组操作
  • 原文地址:https://www.cnblogs.com/alan666/p/8311788.html
Copyright © 2020-2023  润新知