2011-04-06 3 views
5

Je viens de découvrir que la fonction getline() qui est à l'origine une extension GNU fait maintenant partie de la norme POSIX 2008.Statut des implémentations POSIX

Existe-t-il un aperçu de l'étendue de la prise en charge de cette version de POSIX?

+2

+1 pour prendre le temps de questionner ce qui est portable –

Répondre

2

Je voudrais juste aller de l'avant et l'utiliser. Il est possible d'implémenter getline (mais pas le plus puissant getdelim) en tant qu'encapsuleur très rapide/efficace autour de fgets, donc si vous êtes prêt à le faire comme solution de repli, l'utilisation de getline ne rendra pas vraiment votre programme moins portable. (Versus quelque chose comme l'utilisation __fpending, qui ne peut être mis en œuvre portably et nécessite une bidouille spécifique à la mise en œuvre à imiter.)

aussi, bien sûr, à la fois getline et getdelim peut simplement être mis en œuvre sur le dessus de flockfile/funlockfile et fgetc. Ce n'est pas très efficace, mais ça marchera n'importe où.

+1

'getdelim' et' getline' peuvent également être implémentés en plus de 'fscanf' avec le spécificateur de conversion'% 200 [^ x] ', où' x' est remplacé avec le caractère délimiteur que vous voulez arrêter et 200 avec la quantité d'espace tampon que vous avez. (Vous pouvez utiliser 'snprintf' avec' %%% zu [^% c] 'pour générer ce spécificateur de conversion.) –