argv vektöründen seçenekleri ayıklar. kısa-seçenekler argümanı getopt işlevindeki gibi kabul edilecek kısa seçenekleri açıklar. uzun-seçenekler argümanı ise yukarıda bahsedildiği gibi kabul edilen uzun seçenekleri açıklar.
getopt_long bir kısa seçeneğe rastlarsa getopt işlevinin yaptığını yapar: seçeneğin karakter kodu ile döner ve seçenek argümanını (eğer varsa) optarg içinde saklar.
getopt_long bir uzun seçeneğe rastlarsa, bu seçeneği tanımlayan flag ve val üzerine tabanlanmış eylemleri ele alır.
Eğer flag bir boş gösterici ise, getopt_long işlevi hangi seçeneğin bulunduğunu belirtmek için val içeriği ile döner. val alanındaki değerleri, farklı anlamlara gelen seçenekleri ayıklamak üzere düzenlemelisiniz, böylece işlev döndükten sonra bu değerleri çözümleyebilirsiniz. Uzun seçenek bir kısa seçeneğin eşdeğeri ise, val içinde kısa seçeneğin karakter kodunu kullanabilirsiniz.
Eğer flag bir boş gösterici değilse, bu, seçeneğin yazılımda bir bayrağı etkinleştirdiği anlamına gelir. Bayrak sizin tanımlayacağınız int türünde bir değişkendir. Bayrağın adresini flag alanına ve saklamasını istediğiniz değeri val alanına koyun. Bu durumda, getopt_long işlevi 0 ile döner.
Herhangi bir uzun seçenek için, getopt_long işlevi seçenek tanımlarını içeren uzun-seçenekler dizisinin seçeneği içeren elemanının indisini *indis-göstr içinde saklayarak döndürür. Seçeneğin ismini uzun-seçenekler[*indis-göstr].name ile alabilirsiniz. Uzun seçenekleri, val alanlarındaki değerlerine göre ya da indislerine göre ayrımsayabilirsiniz. Ayrıca bir bayrak tanımlayan uzun seçenekleri bu yolla da ayrımsayabilirsiniz.
Bir uzun seçenek bir argümana sahipse, getopt_long işlevi dönmeden önce argüman değerini optarg değişkenine atar. Seçenek argümana sahip değilse, optarg değişkenindeki değer bir boş gösterici olacaktır. Bu durum bir isteğe bağlı argüman olup olmadığını size söyleyebilir.
getopt_long artık seçenek bulamazsa, -1 değeri ile döner ve argv dizisindeki sonraki argümanın indisini optind değişkenine atar.