Linux C學習 getline 函式

2021-07-13 17:00:12 字數 2475 閱讀 3420

getline不是c庫函式,而是c++庫函式。它會生成乙個包含一串從輸入流讀入的字元的字串,直到以下情況發生會導致生成的此字串結束。1)到檔案結束,2)遇到函式的定界符,3)輸入達到最大限度。

linux標準c中使用條件:

#define _gnu_source

#include

函式宣告:

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 plain

copy

fs@ubuntu:~/qiang/getline$ mkdir test  

fs@ubuntu:~/qiang/getline$ cd test/  

fs@ubuntu:~/qiang/getline/test$ ls  

fs@ubuntu:~/qiang/getline/test$ touch xiao  

fs@ubuntu:~/qiang/getline/test$ touch qiang  

fs@ubuntu:~/qiang/getline/test$ touch zhi  

fs@ubuntu:~/qiang/getline/test$ touch hello  

fs@ubuntu:~/qiang/getline/test$ touch world  

fs@ubuntu:~/qiang/getline/test$ ls  

hello  qiang  world  xiao  zhi  

fs@ubuntu:~/qiang/getline/test$ ls >line.txt  

fs@ubuntu:~/qiang/getline/test$ ls  

hello  line.txt  qiang  world  xiao  zhi  

fs@ubuntu:~/qiang/getline/test$   

看看line.txt裡面的內容:

執行程式如下:

[cpp]view plain

copy

#include 

#include 

intmain(

void

)    

if(line)  

free(line);  

exit(exit_success);  

}  

執行結果如下:

[cpp]view plain

copy

fs@ubuntu:~/qiang/getline$ gcc -o getline getline.c   

fs@ubuntu:~/qiang/getline$ ./getline   

retrieved line of length 6 :  

hello  

retrieved line of length 9 :  

line.txt  

retrieved line of length 6 :  

qiang  

retrieved line of length 6 :  

world  

retrieved line of length 5 :  

xiao  

retrieved line of length 4 :  

zhi  

對比一下line.txt中的內容,可以看到每一行都被正確的讀取;。

這裡簡單提一下fopen()函式,fopen()函式是基於資料流的i/o操作中,用來開啟乙個檔案,或者說開啟乙個資料流,開啟資料流以後,就可以對資料流繼續擰輸入和輸出的操作。c語言中stdin、stdout、stderr分別是標準輸入流、標準輸出流及標準出錯流的邏輯目的,他們都預設對應相應的物理終端。在程式執行伊始,不需要進行open()操作,流自動開啟。關於檔案描述符和資料流的區別,後面會開文章專門寫這一篇

Linux C 學習之路

linux系統基礎 常用unix linux命令 熟悉檔案管理 文字處理 程序管理 網路 系統管理等各個方面大約100個常用的命令。深入了解bash 了解linux預設shell bash 的語法 命令執行 i o重定向 任務控制等。正規表示式基礎 由於unix linux中很多強大的文字處理命令如...

Linux C 學習之路

module01 linux系統基礎 由於本系列課程基於linux 或unix 熟悉linux作業系統是必要的前提。該模組的課程包含以下方面的內容 常用unix linux命令 熟悉檔案管理 文字處理 程序管理 網路 系統管理等各個方面大約100個常用的命令。深入了解bash 了解linux預設sh...

Linux C 學習筆記

1.linux 程序與訊號 檢視當前系統所有程序的shell命令 ps aux 檢視程序樹 pstree 檢視當前使用者啟動的程序 ps af kill 程序號 kill 9 程序號 強行殺死程序 killall 程序名字 如果乙個程序的父程序被殺死 則init就程式設計當前程序的父程序 了解實時作...