簡體   English   中英

這是什么 ssize_t getline(char **lineptr, size_t *n, FILE *stream); function?

[英]What is this ssize_t getline(char **lineptr, size_t *n, FILE *stream); function?

When I was looking at the C++ std::getline function in <string> , I accidently run man getline in my Ubuntu Terminal I found this function:

ssize_t getline(char **lineptr, size_t *n, FILE *stream);

我知道這與std::getline完全不同。 它們恰好具有相同的 function 名稱。

APUELinux 編程接口均未提及此 function。 但它屬於標准 C 庫( #include <stdio.h> )。

我確實閱讀了描述,它似乎只是一個getline function 將字節存儲到動態緩沖區/內存中 除此之外沒有什么特別的。

有人能告訴我這個 function 的主要用途是什么嗎? 它有什么特別之處? 嘗試了谷歌,但一無所獲。

這個 function 沒有什么特別之處。 POSIX指定從stream中讀取單個以換行符分隔的行,並將其讀取到地址由lineptr給出的緩沖區中,並且該緩沖區必須足夠大以容納n個字節。

lineptrn是指針的原因是它們既用作 function 的輸入,也可能用作 output 的輸入。 如果lineptr在入口處是NULL ,或者n表示它的大小太小而無法容納從stream讀取的行,那么getline (重新)分配一個緩沖區並使用相應的信息更新lineptrn

getlinefgets更容易使用,因為后者將在到達緩沖區末尾時停止讀取。 因此,如果fgets嘗試讀取比提供的緩沖區更長的行,它將返回部分讀取,調用者將不得不再次讀取並連接多個部分。 在這種情況下, getline將重新分配提供的緩沖區(如果有)。

GNU C 庫文檔中所述

標准 C 具有執行此操作的功能,但它們不是很安全: null 字符甚至(for gets )長行都會混淆它們。 因此 GNU C 庫提供了非標准的getline function,可以輕松可靠地讀取行。

getline起源於 GNU C 庫,並在 2008 版中添加到 POSIX。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM