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() 屬於行緩衝,讀取一行數據(遇到'\n')便會刷新。
 
我們可以利用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 :\n", read);
		line[read-1]='\0';//將換行符'\n'替換成 '\0'
		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 :\n", read);
//              line[read-1]='\0';
                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





發佈了191 篇原創文章 · 獲贊 363 · 訪問量 124萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章