| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169 |
- This is libc.info, produced by makeinfo version 7.3 from libc.texinfo.
- This is ‘The GNU C Library Reference Manual’, for version 2.43.
- Copyright © 1993-2026 Free Software Foundation, Inc.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.3 or
- any later version published by the Free Software Foundation; with the
- Invariant Sections being "Free Software Needs Free Documentation" and
- "GNU Lesser General Public License", the Front-Cover texts being "A GNU
- Manual", and with the Back-Cover Texts as in (a) below. A copy of the
- license is included in the section entitled "GNU Free Documentation
- License".
- (a) The FSF's Back-Cover Text is: "You have the freedom to copy and
- modify this GNU manual. Buying copies from the FSF supports it in
- developing GNU and promoting software freedom."
- INFO-DIR-SECTION Software libraries
- START-INFO-DIR-ENTRY
- * Libc: (libc). C library.
- END-INFO-DIR-ENTRY
- INFO-DIR-SECTION GNU C library functions and macros
- START-INFO-DIR-ENTRY
- * ALTWERASE: (libc)Local Modes.
- * ARGP_ERR_UNKNOWN: (libc)Argp Parser Functions.
- * ARG_MAX: (libc)General Limits.
- * BAUD_MAX: (libc)Line Speed.
- * BC_BASE_MAX: (libc)Utility Limits.
- * BC_DIM_MAX: (libc)Utility Limits.
- * BC_SCALE_MAX: (libc)Utility Limits.
- * BC_STRING_MAX: (libc)Utility Limits.
- * BRKINT: (libc)Input Modes.
- * BUFSIZ: (libc)Controlling Buffering.
- * CCTS_OFLOW: (libc)Control Modes.
- * CHAR_BIT: (libc)Width of Type.
- * CHILD_MAX: (libc)General Limits.
- * CIGNORE: (libc)Control Modes.
- * CLK_TCK: (libc)Processor Time.
- * CLOCAL: (libc)Control Modes.
- * CLOCKS_PER_SEC: (libc)CPU Time.
- * CLOCK_BOOTTIME: (libc)Getting the Time.
- * CLOCK_BOOTTIME_ALARM: (libc)Getting the Time.
- * CLOCK_MONOTONIC: (libc)Getting the Time.
- * CLOCK_MONOTONIC_COARSE: (libc)Getting the Time.
- * CLOCK_MONOTONIC_RAW: (libc)Getting the Time.
- * CLOCK_PROCESS_CPUTIME_ID: (libc)Getting the Time.
- * CLOCK_REALTIME: (libc)Getting the Time.
- * CLOCK_REALTIME_ALARM: (libc)Getting the Time.
- * CLOCK_REALTIME_COARSE: (libc)Getting the Time.
- * CLOCK_TAI: (libc)Getting the Time.
- * CLOCK_THREAD_CPUTIME_ID: (libc)Getting the Time.
- * COLL_WEIGHTS_MAX: (libc)Utility Limits.
- * CPU_ALLOC: (libc)CPU Affinity.
- * CPU_ALLOC_SIZE: (libc)CPU Affinity.
- * CPU_AND: (libc)CPU Affinity.
- * CPU_AND_S: (libc)CPU Affinity.
- * CPU_CLR: (libc)CPU Affinity.
- * CPU_CLR_S: (libc)CPU Affinity.
- * CPU_COUNT: (libc)CPU Affinity.
- * CPU_COUNT_S: (libc)CPU Affinity.
- * CPU_EQUAL: (libc)CPU Affinity.
- * CPU_EQUAL_S: (libc)CPU Affinity.
- * CPU_FEATURE_ACTIVE: (libc)X86.
- * CPU_FEATURE_PRESENT: (libc)X86.
- * CPU_FREE: (libc)CPU Affinity.
- * CPU_ISSET: (libc)CPU Affinity.
- * CPU_ISSET_S: (libc)CPU Affinity.
- * CPU_OR: (libc)CPU Affinity.
- * CPU_OR_S: (libc)CPU Affinity.
- * CPU_SET: (libc)CPU Affinity.
- * CPU_SETSIZE: (libc)CPU Affinity.
- * CPU_SET_S: (libc)CPU Affinity.
- * CPU_XOR: (libc)CPU Affinity.
- * CPU_XOR_S: (libc)CPU Affinity.
- * CPU_ZERO: (libc)CPU Affinity.
- * CPU_ZERO_S: (libc)CPU Affinity.
- * CREAD: (libc)Control Modes.
- * CRTS_IFLOW: (libc)Control Modes.
- * CS5: (libc)Control Modes.
- * CS6: (libc)Control Modes.
- * CS7: (libc)Control Modes.
- * CS8: (libc)Control Modes.
- * CSIZE: (libc)Control Modes.
- * CSTOPB: (libc)Control Modes.
- * DLFO_EH_SEGMENT_TYPE: (libc)Dynamic Linker Introspection.
- * DLFO_STRUCT_HAS_EH_COUNT: (libc)Dynamic Linker Introspection.
- * DLFO_STRUCT_HAS_EH_DBASE: (libc)Dynamic Linker Introspection.
- * DTTOIF: (libc)Directory Entries.
- * E2BIG: (libc)Error Codes.
- * EACCES: (libc)Error Codes.
- * EADDRINUSE: (libc)Error Codes.
- * EADDRNOTAVAIL: (libc)Error Codes.
- * EADV: (libc)Error Codes.
- * EAFNOSUPPORT: (libc)Error Codes.
- * EAGAIN: (libc)Error Codes.
- * EALREADY: (libc)Error Codes.
- * EAUTH: (libc)Error Codes.
- * EBACKGROUND: (libc)Error Codes.
- * EBADE: (libc)Error Codes.
- * EBADF: (libc)Error Codes.
- * EBADFD: (libc)Error Codes.
- * EBADMSG: (libc)Error Codes.
- * EBADR: (libc)Error Codes.
- * EBADRPC: (libc)Error Codes.
- * EBADRQC: (libc)Error Codes.
- * EBADSLT: (libc)Error Codes.
- * EBFONT: (libc)Error Codes.
- * EBUSY: (libc)Error Codes.
- * ECANCELED: (libc)Error Codes.
- * ECHILD: (libc)Error Codes.
- * ECHO: (libc)Local Modes.
- * ECHOCTL: (libc)Local Modes.
- * ECHOE: (libc)Local Modes.
- * ECHOK: (libc)Local Modes.
- * ECHOKE: (libc)Local Modes.
- * ECHONL: (libc)Local Modes.
- * ECHOPRT: (libc)Local Modes.
- * ECHRNG: (libc)Error Codes.
- * ECOMM: (libc)Error Codes.
- * ECONNABORTED: (libc)Error Codes.
- * ECONNREFUSED: (libc)Error Codes.
- * ECONNRESET: (libc)Error Codes.
- * ED: (libc)Error Codes.
- * EDEADLK: (libc)Error Codes.
- * EDEADLOCK: (libc)Error Codes.
- * EDESTADDRREQ: (libc)Error Codes.
- * EDIED: (libc)Error Codes.
- * EDOM: (libc)Error Codes.
- * EDOTDOT: (libc)Error Codes.
- * EDQUOT: (libc)Error Codes.
- * EEXIST: (libc)Error Codes.
- * EFAULT: (libc)Error Codes.
- * EFBIG: (libc)Error Codes.
- * EFTYPE: (libc)Error Codes.
- * EGRATUITOUS: (libc)Error Codes.
- * EGREGIOUS: (libc)Error Codes.
- * EHOSTDOWN: (libc)Error Codes.
- * EHOSTUNREACH: (libc)Error Codes.
- * EHWPOISON: (libc)Error Codes.
- * EIDRM: (libc)Error Codes.
- * EIEIO: (libc)Error Codes.
- * EILSEQ: (libc)Error Codes.
- * EINPROGRESS: (libc)Error Codes.
- * EINTR: (libc)Error Codes.
- * EINVAL: (libc)Error Codes.
- * EIO: (libc)Error Codes.
- * EISCONN: (libc)Error Codes.
- * EISDIR: (libc)Error Codes.
- * EISNAM: (libc)Error Codes.
- * EKEYEXPIRED: (libc)Error Codes.
- * EKEYREJECTED: (libc)Error Codes.
- * EKEYREVOKED: (libc)Error Codes.
- * EL2HLT: (libc)Error Codes.
- * EL2NSYNC: (libc)Error Codes.
- * EL3HLT: (libc)Error Codes.
- * EL3RST: (libc)Error Codes.
- * ELIBACC: (libc)Error Codes.
- * ELIBBAD: (libc)Error Codes.
- * ELIBEXEC: (libc)Error Codes.
- * ELIBMAX: (libc)Error Codes.
- * ELIBSCN: (libc)Error Codes.
- * ELNRNG: (libc)Error Codes.
- * ELOOP: (libc)Error Codes.
- * EMEDIUMTYPE: (libc)Error Codes.
- * EMFILE: (libc)Error Codes.
- * EMLINK: (libc)Error Codes.
- * EMSGSIZE: (libc)Error Codes.
- * EMULTIHOP: (libc)Error Codes.
- * ENAMETOOLONG: (libc)Error Codes.
- * ENAVAIL: (libc)Error Codes.
- * ENEEDAUTH: (libc)Error Codes.
- * ENETDOWN: (libc)Error Codes.
- * ENETRESET: (libc)Error Codes.
- * ENETUNREACH: (libc)Error Codes.
- * ENFILE: (libc)Error Codes.
- * ENOANO: (libc)Error Codes.
- * ENOBUFS: (libc)Error Codes.
- * ENOCSI: (libc)Error Codes.
- * ENODATA: (libc)Error Codes.
- * ENODEV: (libc)Error Codes.
- * ENOENT: (libc)Error Codes.
- * ENOEXEC: (libc)Error Codes.
- * ENOKEY: (libc)Error Codes.
- * ENOLCK: (libc)Error Codes.
- * ENOLINK: (libc)Error Codes.
- * ENOMEDIUM: (libc)Error Codes.
- * ENOMEM: (libc)Error Codes.
- * ENOMSG: (libc)Error Codes.
- * ENONET: (libc)Error Codes.
- * ENOPKG: (libc)Error Codes.
- * ENOPROTOOPT: (libc)Error Codes.
- * ENOSPC: (libc)Error Codes.
- * ENOSR: (libc)Error Codes.
- * ENOSTR: (libc)Error Codes.
- * ENOSYS: (libc)Error Codes.
- * ENOTBLK: (libc)Error Codes.
- * ENOTCONN: (libc)Error Codes.
- * ENOTDIR: (libc)Error Codes.
- * ENOTEMPTY: (libc)Error Codes.
- * ENOTNAM: (libc)Error Codes.
- * ENOTRECOVERABLE: (libc)Error Codes.
- * ENOTSOCK: (libc)Error Codes.
- * ENOTSUP: (libc)Error Codes.
- * ENOTTY: (libc)Error Codes.
- * ENOTUNIQ: (libc)Error Codes.
- * ENXIO: (libc)Error Codes.
- * EOF: (libc)EOF and Errors.
- * EOPNOTSUPP: (libc)Error Codes.
- * EOVERFLOW: (libc)Error Codes.
- * EOWNERDEAD: (libc)Error Codes.
- * EPERM: (libc)Error Codes.
- * EPFNOSUPPORT: (libc)Error Codes.
- * EPIPE: (libc)Error Codes.
- * EPROCLIM: (libc)Error Codes.
- * EPROCUNAVAIL: (libc)Error Codes.
- * EPROGMISMATCH: (libc)Error Codes.
- * EPROGUNAVAIL: (libc)Error Codes.
- * EPROTO: (libc)Error Codes.
- * EPROTONOSUPPORT: (libc)Error Codes.
- * EPROTOTYPE: (libc)Error Codes.
- * EQUIV_CLASS_MAX: (libc)Utility Limits.
- * ERANGE: (libc)Error Codes.
- * EREMCHG: (libc)Error Codes.
- * EREMOTE: (libc)Error Codes.
- * EREMOTEIO: (libc)Error Codes.
- * ERESTART: (libc)Error Codes.
- * ERFKILL: (libc)Error Codes.
- * EROFS: (libc)Error Codes.
- * ERPCMISMATCH: (libc)Error Codes.
- * ESHUTDOWN: (libc)Error Codes.
- * ESOCKTNOSUPPORT: (libc)Error Codes.
- * ESPIPE: (libc)Error Codes.
- * ESRCH: (libc)Error Codes.
- * ESRMNT: (libc)Error Codes.
- * ESTALE: (libc)Error Codes.
- * ESTRPIPE: (libc)Error Codes.
- * ETIME: (libc)Error Codes.
- * ETIMEDOUT: (libc)Error Codes.
- * ETOOMANYREFS: (libc)Error Codes.
- * ETXTBSY: (libc)Error Codes.
- * EUCLEAN: (libc)Error Codes.
- * EUNATCH: (libc)Error Codes.
- * EUSERS: (libc)Error Codes.
- * EWOULDBLOCK: (libc)Error Codes.
- * EXDEV: (libc)Error Codes.
- * EXFULL: (libc)Error Codes.
- * EXIT_FAILURE: (libc)Exit Status.
- * EXIT_SUCCESS: (libc)Exit Status.
- * EXPR_NEST_MAX: (libc)Utility Limits.
- * FD_CLOEXEC: (libc)Descriptor Flags.
- * FD_CLR: (libc)Waiting for I/O.
- * FD_ISSET: (libc)Waiting for I/O.
- * FD_SET: (libc)Waiting for I/O.
- * FD_SETSIZE: (libc)Waiting for I/O.
- * FD_ZERO: (libc)Waiting for I/O.
- * FE_SNANS_ALWAYS_SIGNAL: (libc)Infinity and NaN.
- * FILENAME_MAX: (libc)Limits for Files.
- * FLUSHO: (libc)Local Modes.
- * FOPEN_MAX: (libc)Opening Streams.
- * FP_ILOGB0: (libc)Exponents and Logarithms.
- * FP_ILOGBNAN: (libc)Exponents and Logarithms.
- * FP_LLOGB0: (libc)Exponents and Logarithms.
- * FP_LLOGBNAN: (libc)Exponents and Logarithms.
- * F_DUPFD: (libc)Duplicating Descriptors.
- * F_GETFD: (libc)Descriptor Flags.
- * F_GETFL: (libc)Getting File Status Flags.
- * F_GETLK: (libc)File Locks.
- * F_GETOWN: (libc)Interrupt Input.
- * F_OFD_GETLK: (libc)Open File Description Locks.
- * F_OFD_SETLK: (libc)Open File Description Locks.
- * F_OFD_SETLKW: (libc)Open File Description Locks.
- * F_OK: (libc)Testing File Access.
- * F_SETFD: (libc)Descriptor Flags.
- * F_SETFL: (libc)Getting File Status Flags.
- * F_SETLK: (libc)File Locks.
- * F_SETLKW: (libc)File Locks.
- * F_SETOWN: (libc)Interrupt Input.
- * HUGE_VAL: (libc)Math Error Reporting.
- * HUGE_VALF: (libc)Math Error Reporting.
- * HUGE_VALL: (libc)Math Error Reporting.
- * HUGE_VAL_FN: (libc)Math Error Reporting.
- * HUGE_VAL_FNx: (libc)Math Error Reporting.
- * HUPCL: (libc)Control Modes.
- * I: (libc)Complex Numbers.
- * ICANON: (libc)Local Modes.
- * ICRNL: (libc)Input Modes.
- * IEXTEN: (libc)Local Modes.
- * IFNAMSIZ: (libc)Interface Naming.
- * IFTODT: (libc)Directory Entries.
- * IGNBRK: (libc)Input Modes.
- * IGNCR: (libc)Input Modes.
- * IGNPAR: (libc)Input Modes.
- * IMAXBEL: (libc)Input Modes.
- * INADDR_ANY: (libc)Host Address Data Type.
- * INADDR_BROADCAST: (libc)Host Address Data Type.
- * INADDR_LOOPBACK: (libc)Host Address Data Type.
- * INADDR_NONE: (libc)Host Address Data Type.
- * INFINITY: (libc)Infinity and NaN.
- * INLCR: (libc)Input Modes.
- * INPCK: (libc)Input Modes.
- * IPPORT_RESERVED: (libc)Ports.
- * IPPORT_USERRESERVED: (libc)Ports.
- * ISIG: (libc)Local Modes.
- * ISTRIP: (libc)Input Modes.
- * IXANY: (libc)Input Modes.
- * IXOFF: (libc)Input Modes.
- * IXON: (libc)Input Modes.
- * LINE_MAX: (libc)Utility Limits.
- * LINK_MAX: (libc)Limits for Files.
- * L_ctermid: (libc)Identifying the Terminal.
- * L_cuserid: (libc)Who Logged In.
- * L_tmpnam: (libc)Temporary Files.
- * MAXNAMLEN: (libc)Limits for Files.
- * MAXSYMLINKS: (libc)Symbolic Links.
- * MAX_CANON: (libc)Limits for Files.
- * MAX_INPUT: (libc)Limits for Files.
- * MB_CUR_MAX: (libc)Selecting the Conversion.
- * MB_LEN_MAX: (libc)Selecting the Conversion.
- * MDMBUF: (libc)Control Modes.
- * MSG_DONTROUTE: (libc)Socket Data Options.
- * MSG_OOB: (libc)Socket Data Options.
- * MSG_PEEK: (libc)Socket Data Options.
- * NAME_MAX: (libc)Limits for Files.
- * NAN: (libc)Infinity and NaN.
- * NCCS: (libc)Mode Data Types.
- * NGROUPS_MAX: (libc)General Limits.
- * NOFLSH: (libc)Local Modes.
- * NOKERNINFO: (libc)Local Modes.
- * NSIG: (libc)Standard Signals.
- * NULL: (libc)Null Pointer Constant.
- * ONLCR: (libc)Output Modes.
- * ONOEOT: (libc)Output Modes.
- * OPEN_MAX: (libc)General Limits.
- * OPOST: (libc)Output Modes.
- * OXTABS: (libc)Output Modes.
- * O_ACCMODE: (libc)Access Modes.
- * O_APPEND: (libc)Operating Modes.
- * O_ASYNC: (libc)Operating Modes.
- * O_CREAT: (libc)Open-time Flags.
- * O_DIRECTORY: (libc)Open-time Flags.
- * O_EXCL: (libc)Open-time Flags.
- * O_EXEC: (libc)Access Modes.
- * O_EXLOCK: (libc)Open-time Flags.
- * O_FSYNC: (libc)Operating Modes.
- * O_IGNORE_CTTY: (libc)Open-time Flags.
- * O_NDELAY: (libc)Operating Modes.
- * O_NOATIME: (libc)Operating Modes.
- * O_NOCTTY: (libc)Open-time Flags.
- * O_NOFOLLOW: (libc)Open-time Flags.
- * O_NOLINK: (libc)Open-time Flags.
- * O_NONBLOCK: (libc)Open-time Flags.
- * O_NONBLOCK: (libc)Operating Modes.
- * O_NOTRANS: (libc)Open-time Flags.
- * O_PATH: (libc)Access Modes.
- * O_RDONLY: (libc)Access Modes.
- * O_RDWR: (libc)Access Modes.
- * O_READ: (libc)Access Modes.
- * O_SHLOCK: (libc)Open-time Flags.
- * O_SYNC: (libc)Operating Modes.
- * O_TMPFILE: (libc)Open-time Flags.
- * O_TRUNC: (libc)Open-time Flags.
- * O_WRITE: (libc)Access Modes.
- * O_WRONLY: (libc)Access Modes.
- * PARENB: (libc)Control Modes.
- * PARMRK: (libc)Input Modes.
- * PARODD: (libc)Control Modes.
- * PATH_MAX: (libc)Limits for Files.
- * PA_FLAG_MASK: (libc)Parsing a Template String.
- * PENDIN: (libc)Local Modes.
- * PF_FILE: (libc)Local Namespace Details.
- * PF_INET6: (libc)Internet Namespace.
- * PF_INET: (libc)Internet Namespace.
- * PF_LOCAL: (libc)Local Namespace Details.
- * PF_UNIX: (libc)Local Namespace Details.
- * PIPE_BUF: (libc)Limits for Files.
- * PTHREAD_ATTR_NO_SIGMASK_NP: (libc)Initial Thread Signal Mask.
- * P_tmpdir: (libc)Temporary Files.
- * RAND_MAX: (libc)ISO Random.
- * RE_DUP_MAX: (libc)General Limits.
- * RLIM_INFINITY: (libc)Limits on Resources.
- * RSEQ_SIG: (libc)Restartable Sequences.
- * R_OK: (libc)Testing File Access.
- * SA_NOCLDSTOP: (libc)Flags for Sigaction.
- * SA_NOCLDWAIT: (libc)Flags for Sigaction.
- * SA_NODEFER: (libc)Flags for Sigaction.
- * SA_ONSTACK: (libc)Flags for Sigaction.
- * SA_RESETHAND: (libc)Flags for Sigaction.
- * SA_RESTART: (libc)Flags for Sigaction.
- * SA_SIGINFO: (libc)Flags for Sigaction.
- * SEEK_CUR: (libc)File Positioning.
- * SEEK_END: (libc)File Positioning.
- * SEEK_SET: (libc)File Positioning.
- * SIGABRT: (libc)Program Error Signals.
- * SIGALRM: (libc)Alarm Signals.
- * SIGBUS: (libc)Program Error Signals.
- * SIGCHLD: (libc)Job Control Signals.
- * SIGCLD: (libc)Job Control Signals.
- * SIGCONT: (libc)Job Control Signals.
- * SIGEMT: (libc)Program Error Signals.
- * SIGFPE: (libc)Program Error Signals.
- * SIGHUP: (libc)Termination Signals.
- * SIGILL: (libc)Program Error Signals.
- * SIGINFO: (libc)Miscellaneous Signals.
- * SIGINT: (libc)Termination Signals.
- * SIGIO: (libc)Asynchronous I/O Signals.
- * SIGIOT: (libc)Program Error Signals.
- * SIGKILL: (libc)Termination Signals.
- * SIGLOST: (libc)Operation Error Signals.
- * SIGPIPE: (libc)Operation Error Signals.
- * SIGPOLL: (libc)Asynchronous I/O Signals.
- * SIGPROF: (libc)Alarm Signals.
- * SIGPWR: (libc)Miscellaneous Signals.
- * SIGQUIT: (libc)Termination Signals.
- * SIGSEGV: (libc)Program Error Signals.
- * SIGSTKFLT: (libc)Program Error Signals.
- * SIGSTOP: (libc)Job Control Signals.
- * SIGSYS: (libc)Program Error Signals.
- * SIGTERM: (libc)Termination Signals.
- * SIGTRAP: (libc)Program Error Signals.
- * SIGTSTP: (libc)Job Control Signals.
- * SIGTTIN: (libc)Job Control Signals.
- * SIGTTOU: (libc)Job Control Signals.
- * SIGURG: (libc)Asynchronous I/O Signals.
- * SIGUSR1: (libc)Miscellaneous Signals.
- * SIGUSR2: (libc)Miscellaneous Signals.
- * SIGVTALRM: (libc)Alarm Signals.
- * SIGWINCH: (libc)Miscellaneous Signals.
- * SIGXCPU: (libc)Operation Error Signals.
- * SIGXFSZ: (libc)Operation Error Signals.
- * SIG_ERR: (libc)Basic Signal Handling.
- * SNAN: (libc)Infinity and NaN.
- * SNANF: (libc)Infinity and NaN.
- * SNANFN: (libc)Infinity and NaN.
- * SNANFNx: (libc)Infinity and NaN.
- * SNANL: (libc)Infinity and NaN.
- * SOCK_DGRAM: (libc)Communication Styles.
- * SOCK_RAW: (libc)Communication Styles.
- * SOCK_RDM: (libc)Communication Styles.
- * SOCK_SEQPACKET: (libc)Communication Styles.
- * SOCK_STREAM: (libc)Communication Styles.
- * SOL_SOCKET: (libc)Socket-Level Options.
- * SPEED_MAX: (libc)Line Speed.
- * SSIZE_MAX: (libc)General Limits.
- * STREAM_MAX: (libc)General Limits.
- * SUN_LEN: (libc)Local Namespace Details.
- * S_IFMT: (libc)Testing File Type.
- * S_ISBLK: (libc)Testing File Type.
- * S_ISCHR: (libc)Testing File Type.
- * S_ISDIR: (libc)Testing File Type.
- * S_ISFIFO: (libc)Testing File Type.
- * S_ISLNK: (libc)Testing File Type.
- * S_ISREG: (libc)Testing File Type.
- * S_ISSOCK: (libc)Testing File Type.
- * S_TYPEISMQ: (libc)Testing File Type.
- * S_TYPEISSEM: (libc)Testing File Type.
- * S_TYPEISSHM: (libc)Testing File Type.
- * TIME_UTC: (libc)Getting the Time.
- * TMP_MAX: (libc)Temporary Files.
- * TOSTOP: (libc)Local Modes.
- * TZNAME_MAX: (libc)General Limits.
- * VDISCARD: (libc)Other Special.
- * VDSUSP: (libc)Signal Characters.
- * VEOF: (libc)Editing Characters.
- * VEOL2: (libc)Editing Characters.
- * VEOL: (libc)Editing Characters.
- * VERASE: (libc)Editing Characters.
- * VINTR: (libc)Signal Characters.
- * VKILL: (libc)Editing Characters.
- * VLNEXT: (libc)Other Special.
- * VMIN: (libc)Noncanonical Input.
- * VQUIT: (libc)Signal Characters.
- * VREPRINT: (libc)Editing Characters.
- * VSTART: (libc)Start/Stop Characters.
- * VSTATUS: (libc)Other Special.
- * VSTOP: (libc)Start/Stop Characters.
- * VSUSP: (libc)Signal Characters.
- * VTIME: (libc)Noncanonical Input.
- * VWERASE: (libc)Editing Characters.
- * WCHAR_MAX: (libc)Extended Char Intro.
- * WCHAR_MIN: (libc)Extended Char Intro.
- * WCOREDUMP: (libc)Process Completion Status.
- * WEOF: (libc)EOF and Errors.
- * WEOF: (libc)Extended Char Intro.
- * WEXITSTATUS: (libc)Process Completion Status.
- * WIFEXITED: (libc)Process Completion Status.
- * WIFSIGNALED: (libc)Process Completion Status.
- * WIFSTOPPED: (libc)Process Completion Status.
- * WSTOPSIG: (libc)Process Completion Status.
- * WTERMSIG: (libc)Process Completion Status.
- * W_OK: (libc)Testing File Access.
- * X_OK: (libc)Testing File Access.
- * _Complex_I: (libc)Complex Numbers.
- * _Exit: (libc)Termination Internals.
- * _Fork: (libc)Creating a Process.
- * _IOFBF: (libc)Controlling Buffering.
- * _IOLBF: (libc)Controlling Buffering.
- * _IONBF: (libc)Controlling Buffering.
- * _Imaginary_I: (libc)Complex Numbers.
- * _PATH_UTMP: (libc)Manipulating the Database.
- * _PATH_WTMP: (libc)Manipulating the Database.
- * _POSIX2_C_DEV: (libc)System Options.
- * _POSIX2_C_VERSION: (libc)Version Supported.
- * _POSIX2_FORT_DEV: (libc)System Options.
- * _POSIX2_FORT_RUN: (libc)System Options.
- * _POSIX2_LOCALEDEF: (libc)System Options.
- * _POSIX2_SW_DEV: (libc)System Options.
- * _POSIX_CHOWN_RESTRICTED: (libc)Options for Files.
- * _POSIX_JOB_CONTROL: (libc)System Options.
- * _POSIX_NO_TRUNC: (libc)Options for Files.
- * _POSIX_SAVED_IDS: (libc)System Options.
- * _POSIX_VDISABLE: (libc)Options for Files.
- * _POSIX_VERSION: (libc)Version Supported.
- * __fbufsize: (libc)Controlling Buffering.
- * __flbf: (libc)Controlling Buffering.
- * __fpending: (libc)Controlling Buffering.
- * __fpurge: (libc)Flushing Buffers.
- * __freadable: (libc)Opening Streams.
- * __freading: (libc)Opening Streams.
- * __fsetlocking: (libc)Streams and Threads.
- * __fwritable: (libc)Opening Streams.
- * __fwriting: (libc)Opening Streams.
- * __gconv_end_fct: (libc)glibc iconv Implementation.
- * __gconv_fct: (libc)glibc iconv Implementation.
- * __gconv_init_fct: (libc)glibc iconv Implementation.
- * __ppc_get_timebase: (libc)PowerPC.
- * __ppc_get_timebase_freq: (libc)PowerPC.
- * __ppc_mdoio: (libc)PowerPC.
- * __ppc_mdoom: (libc)PowerPC.
- * __ppc_set_ppr_low: (libc)PowerPC.
- * __ppc_set_ppr_med: (libc)PowerPC.
- * __ppc_set_ppr_med_high: (libc)PowerPC.
- * __ppc_set_ppr_med_low: (libc)PowerPC.
- * __ppc_set_ppr_very_low: (libc)PowerPC.
- * __ppc_yield: (libc)PowerPC.
- * __riscv_flush_icache: (libc)RISC-V.
- * __va_copy: (libc)Argument Macros.
- * __x86_get_cpuid_feature_leaf: (libc)X86.
- * _dl_find_object: (libc)Dynamic Linker Introspection.
- * _exit: (libc)Termination Internals.
- * _flushlbf: (libc)Flushing Buffers.
- * _tolower: (libc)Case Conversion.
- * _toupper: (libc)Case Conversion.
- * a64l: (libc)Encode Binary Data.
- * abort: (libc)Aborting a Program.
- * abs: (libc)Absolute Value.
- * accept: (libc)Accepting Connections.
- * access: (libc)Testing File Access.
- * acos: (libc)Inverse Trig Functions.
- * acosf: (libc)Inverse Trig Functions.
- * acosfN: (libc)Inverse Trig Functions.
- * acosfNx: (libc)Inverse Trig Functions.
- * acosh: (libc)Hyperbolic Functions.
- * acoshf: (libc)Hyperbolic Functions.
- * acoshfN: (libc)Hyperbolic Functions.
- * acoshfNx: (libc)Hyperbolic Functions.
- * acoshl: (libc)Hyperbolic Functions.
- * acosl: (libc)Inverse Trig Functions.
- * acospi: (libc)Inverse Trig Functions.
- * acospif: (libc)Inverse Trig Functions.
- * acospifN: (libc)Inverse Trig Functions.
- * acospifNx: (libc)Inverse Trig Functions.
- * acospil: (libc)Inverse Trig Functions.
- * addmntent: (libc)mtab.
- * addseverity: (libc)Adding Severity Classes.
- * adjtime: (libc)Setting and Adjusting the Time.
- * adjtimex: (libc)Setting and Adjusting the Time.
- * aio_cancel64: (libc)Cancel AIO Operations.
- * aio_cancel: (libc)Cancel AIO Operations.
- * aio_error64: (libc)Status of AIO Operations.
- * aio_error: (libc)Status of AIO Operations.
- * aio_fsync64: (libc)Synchronizing AIO Operations.
- * aio_fsync: (libc)Synchronizing AIO Operations.
- * aio_init: (libc)Configuration of AIO.
- * aio_read64: (libc)Asynchronous Reads/Writes.
- * aio_read: (libc)Asynchronous Reads/Writes.
- * aio_return64: (libc)Status of AIO Operations.
- * aio_return: (libc)Status of AIO Operations.
- * aio_suspend64: (libc)Synchronizing AIO Operations.
- * aio_suspend: (libc)Synchronizing AIO Operations.
- * aio_write64: (libc)Asynchronous Reads/Writes.
- * aio_write: (libc)Asynchronous Reads/Writes.
- * alarm: (libc)Setting an Alarm.
- * aligned_alloc: (libc)Aligned Memory Blocks.
- * alloca: (libc)Variable Size Automatic.
- * alphasort64: (libc)Scanning Directory Content.
- * alphasort: (libc)Scanning Directory Content.
- * arc4random: (libc)High Quality Random.
- * arc4random_buf: (libc)High Quality Random.
- * arc4random_uniform: (libc)High Quality Random.
- * argp_error: (libc)Argp Helper Functions.
- * argp_failure: (libc)Argp Helper Functions.
- * argp_help: (libc)Argp Help.
- * argp_parse: (libc)Argp.
- * argp_state_help: (libc)Argp Helper Functions.
- * argp_usage: (libc)Argp Helper Functions.
- * argz_add: (libc)Argz Functions.
- * argz_add_sep: (libc)Argz Functions.
- * argz_append: (libc)Argz Functions.
- * argz_count: (libc)Argz Functions.
- * argz_create: (libc)Argz Functions.
- * argz_create_sep: (libc)Argz Functions.
- * argz_delete: (libc)Argz Functions.
- * argz_extract: (libc)Argz Functions.
- * argz_insert: (libc)Argz Functions.
- * argz_next: (libc)Argz Functions.
- * argz_replace: (libc)Argz Functions.
- * argz_stringify: (libc)Argz Functions.
- * asctime: (libc)Formatting Calendar Time.
- * asctime_r: (libc)Formatting Calendar Time.
- * asin: (libc)Inverse Trig Functions.
- * asinf: (libc)Inverse Trig Functions.
- * asinfN: (libc)Inverse Trig Functions.
- * asinfNx: (libc)Inverse Trig Functions.
- * asinh: (libc)Hyperbolic Functions.
- * asinhf: (libc)Hyperbolic Functions.
- * asinhfN: (libc)Hyperbolic Functions.
- * asinhfNx: (libc)Hyperbolic Functions.
- * asinhl: (libc)Hyperbolic Functions.
- * asinl: (libc)Inverse Trig Functions.
- * asinpi: (libc)Inverse Trig Functions.
- * asinpif: (libc)Inverse Trig Functions.
- * asinpifN: (libc)Inverse Trig Functions.
- * asinpifNx: (libc)Inverse Trig Functions.
- * asinpil: (libc)Inverse Trig Functions.
- * asprintf: (libc)Dynamic Output.
- * assert: (libc)Consistency Checking.
- * assert_perror: (libc)Consistency Checking.
- * atan2: (libc)Inverse Trig Functions.
- * atan2f: (libc)Inverse Trig Functions.
- * atan2fN: (libc)Inverse Trig Functions.
- * atan2fNx: (libc)Inverse Trig Functions.
- * atan2l: (libc)Inverse Trig Functions.
- * atan2pi: (libc)Inverse Trig Functions.
- * atan2pif: (libc)Inverse Trig Functions.
- * atan2pifN: (libc)Inverse Trig Functions.
- * atan2pifNx: (libc)Inverse Trig Functions.
- * atan2pil: (libc)Inverse Trig Functions.
- * atan: (libc)Inverse Trig Functions.
- * atanf: (libc)Inverse Trig Functions.
- * atanfN: (libc)Inverse Trig Functions.
- * atanfNx: (libc)Inverse Trig Functions.
- * atanh: (libc)Hyperbolic Functions.
- * atanhf: (libc)Hyperbolic Functions.
- * atanhfN: (libc)Hyperbolic Functions.
- * atanhfNx: (libc)Hyperbolic Functions.
- * atanhl: (libc)Hyperbolic Functions.
- * atanl: (libc)Inverse Trig Functions.
- * atanpi: (libc)Inverse Trig Functions.
- * atanpif: (libc)Inverse Trig Functions.
- * atanpifN: (libc)Inverse Trig Functions.
- * atanpifNx: (libc)Inverse Trig Functions.
- * atanpil: (libc)Inverse Trig Functions.
- * atexit: (libc)Cleanups on Exit.
- * atof: (libc)Parsing of Floats.
- * atoi: (libc)Parsing of Integers.
- * atol: (libc)Parsing of Integers.
- * atoll: (libc)Parsing of Integers.
- * backtrace: (libc)Backtraces.
- * backtrace_symbols: (libc)Backtraces.
- * backtrace_symbols_fd: (libc)Backtraces.
- * basename: (libc)Finding Tokens in a String.
- * basename: (libc)Finding Tokens in a String.
- * bcmp: (libc)String/Array Comparison.
- * bcopy: (libc)Copying Strings and Arrays.
- * bind: (libc)Setting Address.
- * bind_textdomain_codeset: (libc)Charset conversion in gettext.
- * bindtextdomain: (libc)Locating gettext catalog.
- * brk: (libc)Resizing the Data Segment.
- * bsearch: (libc)Array Search Function.
- * btowc: (libc)Converting a Character.
- * bzero: (libc)Copying Strings and Arrays.
- * cabs: (libc)Absolute Value.
- * cabsf: (libc)Absolute Value.
- * cabsfN: (libc)Absolute Value.
- * cabsfNx: (libc)Absolute Value.
- * cabsl: (libc)Absolute Value.
- * cacos: (libc)Inverse Trig Functions.
- * cacosf: (libc)Inverse Trig Functions.
- * cacosfN: (libc)Inverse Trig Functions.
- * cacosfNx: (libc)Inverse Trig Functions.
- * cacosh: (libc)Hyperbolic Functions.
- * cacoshf: (libc)Hyperbolic Functions.
- * cacoshfN: (libc)Hyperbolic Functions.
- * cacoshfNx: (libc)Hyperbolic Functions.
- * cacoshl: (libc)Hyperbolic Functions.
- * cacosl: (libc)Inverse Trig Functions.
- * call_once: (libc)Call Once.
- * calloc: (libc)Allocating Cleared Space.
- * canonicalize: (libc)FP Bit Twiddling.
- * canonicalize_file_name: (libc)Symbolic Links.
- * canonicalizef: (libc)FP Bit Twiddling.
- * canonicalizefN: (libc)FP Bit Twiddling.
- * canonicalizefNx: (libc)FP Bit Twiddling.
- * canonicalizel: (libc)FP Bit Twiddling.
- * carg: (libc)Operations on Complex.
- * cargf: (libc)Operations on Complex.
- * cargfN: (libc)Operations on Complex.
- * cargfNx: (libc)Operations on Complex.
- * cargl: (libc)Operations on Complex.
- * casin: (libc)Inverse Trig Functions.
- * casinf: (libc)Inverse Trig Functions.
- * casinfN: (libc)Inverse Trig Functions.
- * casinfNx: (libc)Inverse Trig Functions.
- * casinh: (libc)Hyperbolic Functions.
- * casinhf: (libc)Hyperbolic Functions.
- * casinhfN: (libc)Hyperbolic Functions.
- * casinhfNx: (libc)Hyperbolic Functions.
- * casinhl: (libc)Hyperbolic Functions.
- * casinl: (libc)Inverse Trig Functions.
- * catan: (libc)Inverse Trig Functions.
- * catanf: (libc)Inverse Trig Functions.
- * catanfN: (libc)Inverse Trig Functions.
- * catanfNx: (libc)Inverse Trig Functions.
- * catanh: (libc)Hyperbolic Functions.
- * catanhf: (libc)Hyperbolic Functions.
- * catanhfN: (libc)Hyperbolic Functions.
- * catanhfNx: (libc)Hyperbolic Functions.
- * catanhl: (libc)Hyperbolic Functions.
- * catanl: (libc)Inverse Trig Functions.
- * catclose: (libc)The catgets Functions.
- * catgets: (libc)The catgets Functions.
- * catopen: (libc)The catgets Functions.
- * cbrt: (libc)Exponents and Logarithms.
- * cbrtf: (libc)Exponents and Logarithms.
- * cbrtfN: (libc)Exponents and Logarithms.
- * cbrtfNx: (libc)Exponents and Logarithms.
- * cbrtl: (libc)Exponents and Logarithms.
- * ccos: (libc)Trig Functions.
- * ccosf: (libc)Trig Functions.
- * ccosfN: (libc)Trig Functions.
- * ccosfNx: (libc)Trig Functions.
- * ccosh: (libc)Hyperbolic Functions.
- * ccoshf: (libc)Hyperbolic Functions.
- * ccoshfN: (libc)Hyperbolic Functions.
- * ccoshfNx: (libc)Hyperbolic Functions.
- * ccoshl: (libc)Hyperbolic Functions.
- * ccosl: (libc)Trig Functions.
- * ceil: (libc)Rounding Functions.
- * ceilf: (libc)Rounding Functions.
- * ceilfN: (libc)Rounding Functions.
- * ceilfNx: (libc)Rounding Functions.
- * ceill: (libc)Rounding Functions.
- * cexp: (libc)Exponents and Logarithms.
- * cexpf: (libc)Exponents and Logarithms.
- * cexpfN: (libc)Exponents and Logarithms.
- * cexpfNx: (libc)Exponents and Logarithms.
- * cexpl: (libc)Exponents and Logarithms.
- * cfgetibaud: (libc)Line Speed.
- * cfgetispeed: (libc)Line Speed.
- * cfgetobaud: (libc)Line Speed.
- * cfgetospeed: (libc)Line Speed.
- * cfmakeraw: (libc)Noncanonical Input.
- * cfsetbaud: (libc)Line Speed.
- * cfsetibaud: (libc)Line Speed.
- * cfsetispeed: (libc)Line Speed.
- * cfsetobaud: (libc)Line Speed.
- * cfsetospeed: (libc)Line Speed.
- * cfsetspeed: (libc)Line Speed.
- * chdir: (libc)Working Directory.
- * chmod: (libc)Setting Permissions.
- * chown: (libc)File Owner.
- * cimag: (libc)Operations on Complex.
- * cimagf: (libc)Operations on Complex.
- * cimagfN: (libc)Operations on Complex.
- * cimagfNx: (libc)Operations on Complex.
- * cimagl: (libc)Operations on Complex.
- * clearenv: (libc)Environment Access.
- * clearerr: (libc)Error Recovery.
- * clearerr_unlocked: (libc)Error Recovery.
- * clock: (libc)CPU Time.
- * clock_getres: (libc)Getting the Time.
- * clock_gettime: (libc)Getting the Time.
- * clock_nanosleep: (libc)Sleeping.
- * clock_settime: (libc)Setting and Adjusting the Time.
- * clog10: (libc)Exponents and Logarithms.
- * clog10f: (libc)Exponents and Logarithms.
- * clog10fN: (libc)Exponents and Logarithms.
- * clog10fNx: (libc)Exponents and Logarithms.
- * clog10l: (libc)Exponents and Logarithms.
- * clog: (libc)Exponents and Logarithms.
- * clogf: (libc)Exponents and Logarithms.
- * clogfN: (libc)Exponents and Logarithms.
- * clogfNx: (libc)Exponents and Logarithms.
- * clogl: (libc)Exponents and Logarithms.
- * close: (libc)Opening and Closing Files.
- * close_range: (libc)Opening and Closing Files.
- * closedir: (libc)Reading/Closing Directory.
- * closefrom: (libc)Opening and Closing Files.
- * closelog: (libc)closelog.
- * cnd_broadcast: (libc)ISO C Condition Variables.
- * cnd_destroy: (libc)ISO C Condition Variables.
- * cnd_init: (libc)ISO C Condition Variables.
- * cnd_signal: (libc)ISO C Condition Variables.
- * cnd_timedwait: (libc)ISO C Condition Variables.
- * cnd_wait: (libc)ISO C Condition Variables.
- * compoundn: (libc)Exponents and Logarithms.
- * compoundnf: (libc)Exponents and Logarithms.
- * compoundnfN: (libc)Exponents and Logarithms.
- * compoundnfNx: (libc)Exponents and Logarithms.
- * compoundnl: (libc)Exponents and Logarithms.
- * confstr: (libc)String Parameters.
- * conj: (libc)Operations on Complex.
- * conjf: (libc)Operations on Complex.
- * conjfN: (libc)Operations on Complex.
- * conjfNx: (libc)Operations on Complex.
- * conjl: (libc)Operations on Complex.
- * connect: (libc)Connecting.
- * copy_file_range: (libc)Copying File Data.
- * copysign: (libc)FP Bit Twiddling.
- * copysignf: (libc)FP Bit Twiddling.
- * copysignfN: (libc)FP Bit Twiddling.
- * copysignfNx: (libc)FP Bit Twiddling.
- * copysignl: (libc)FP Bit Twiddling.
- * cos: (libc)Trig Functions.
- * cosf: (libc)Trig Functions.
- * cosfN: (libc)Trig Functions.
- * cosfNx: (libc)Trig Functions.
- * cosh: (libc)Hyperbolic Functions.
- * coshf: (libc)Hyperbolic Functions.
- * coshfN: (libc)Hyperbolic Functions.
- * coshfNx: (libc)Hyperbolic Functions.
- * coshl: (libc)Hyperbolic Functions.
- * cosl: (libc)Trig Functions.
- * cospi: (libc)Trig Functions.
- * cospif: (libc)Trig Functions.
- * cospifN: (libc)Trig Functions.
- * cospifNx: (libc)Trig Functions.
- * cospil: (libc)Trig Functions.
- * cpow: (libc)Exponents and Logarithms.
- * cpowf: (libc)Exponents and Logarithms.
- * cpowfN: (libc)Exponents and Logarithms.
- * cpowfNx: (libc)Exponents and Logarithms.
- * cpowl: (libc)Exponents and Logarithms.
- * cproj: (libc)Operations on Complex.
- * cprojf: (libc)Operations on Complex.
- * cprojfN: (libc)Operations on Complex.
- * cprojfNx: (libc)Operations on Complex.
- * cprojl: (libc)Operations on Complex.
- * creal: (libc)Operations on Complex.
- * crealf: (libc)Operations on Complex.
- * crealfN: (libc)Operations on Complex.
- * crealfNx: (libc)Operations on Complex.
- * creall: (libc)Operations on Complex.
- * creat64: (libc)Opening and Closing Files.
- * creat: (libc)Opening and Closing Files.
- * csin: (libc)Trig Functions.
- * csinf: (libc)Trig Functions.
- * csinfN: (libc)Trig Functions.
- * csinfNx: (libc)Trig Functions.
- * csinh: (libc)Hyperbolic Functions.
- * csinhf: (libc)Hyperbolic Functions.
- * csinhfN: (libc)Hyperbolic Functions.
- * csinhfNx: (libc)Hyperbolic Functions.
- * csinhl: (libc)Hyperbolic Functions.
- * csinl: (libc)Trig Functions.
- * csqrt: (libc)Exponents and Logarithms.
- * csqrtf: (libc)Exponents and Logarithms.
- * csqrtfN: (libc)Exponents and Logarithms.
- * csqrtfNx: (libc)Exponents and Logarithms.
- * csqrtl: (libc)Exponents and Logarithms.
- * ctan: (libc)Trig Functions.
- * ctanf: (libc)Trig Functions.
- * ctanfN: (libc)Trig Functions.
- * ctanfNx: (libc)Trig Functions.
- * ctanh: (libc)Hyperbolic Functions.
- * ctanhf: (libc)Hyperbolic Functions.
- * ctanhfN: (libc)Hyperbolic Functions.
- * ctanhfNx: (libc)Hyperbolic Functions.
- * ctanhl: (libc)Hyperbolic Functions.
- * ctanl: (libc)Trig Functions.
- * ctermid: (libc)Identifying the Terminal.
- * ctime: (libc)Formatting Calendar Time.
- * ctime_r: (libc)Formatting Calendar Time.
- * cuserid: (libc)Who Logged In.
- * daddl: (libc)Misc FP Arithmetic.
- * dcgettext: (libc)Translation with gettext.
- * dcngettext: (libc)Advanced gettext functions.
- * ddivl: (libc)Misc FP Arithmetic.
- * dfmal: (libc)Misc FP Arithmetic.
- * dgettext: (libc)Translation with gettext.
- * difftime: (libc)Calculating Elapsed Time.
- * dirfd: (libc)Opening a Directory.
- * dirname: (libc)Finding Tokens in a String.
- * div: (libc)Integer Division.
- * dlinfo: (libc)Dynamic Linker Introspection.
- * dmull: (libc)Misc FP Arithmetic.
- * dngettext: (libc)Advanced gettext functions.
- * dprintf: (libc)Formatted Output Functions.
- * drand48: (libc)SVID Random.
- * drand48_r: (libc)SVID Random.
- * drem: (libc)Remainder Functions.
- * dremf: (libc)Remainder Functions.
- * dreml: (libc)Remainder Functions.
- * dsqrtl: (libc)Misc FP Arithmetic.
- * dsubl: (libc)Misc FP Arithmetic.
- * dup2: (libc)Duplicating Descriptors.
- * dup3: (libc)Duplicating Descriptors.
- * dup: (libc)Duplicating Descriptors.
- * ecvt: (libc)System V Number Conversion.
- * ecvt_r: (libc)System V Number Conversion.
- * endfsent: (libc)fstab.
- * endgrent: (libc)Scanning All Groups.
- * endhostent: (libc)Host Names.
- * endmntent: (libc)mtab.
- * endnetent: (libc)Networks Database.
- * endnetgrent: (libc)Lookup Netgroup.
- * endprotoent: (libc)Protocols Database.
- * endpwent: (libc)Scanning All Users.
- * endservent: (libc)Services Database.
- * endutent: (libc)Manipulating the Database.
- * endutxent: (libc)XPG Functions.
- * envz_add: (libc)Envz Functions.
- * envz_entry: (libc)Envz Functions.
- * envz_get: (libc)Envz Functions.
- * envz_merge: (libc)Envz Functions.
- * envz_remove: (libc)Envz Functions.
- * envz_strip: (libc)Envz Functions.
- * epoll_create: (libc)Other Low-Level I/O APIs.
- * epoll_wait: (libc)Other Low-Level I/O APIs.
- * erand48: (libc)SVID Random.
- * erand48_r: (libc)SVID Random.
- * erf: (libc)Special Functions.
- * erfc: (libc)Special Functions.
- * erfcf: (libc)Special Functions.
- * erfcfN: (libc)Special Functions.
- * erfcfNx: (libc)Special Functions.
- * erfcl: (libc)Special Functions.
- * erff: (libc)Special Functions.
- * erffN: (libc)Special Functions.
- * erffNx: (libc)Special Functions.
- * erfl: (libc)Special Functions.
- * err: (libc)Error Messages.
- * errno: (libc)Checking for Errors.
- * error: (libc)Error Messages.
- * error_at_line: (libc)Error Messages.
- * errx: (libc)Error Messages.
- * execl: (libc)Executing a File.
- * execle: (libc)Executing a File.
- * execlp: (libc)Executing a File.
- * execv: (libc)Executing a File.
- * execve: (libc)Executing a File.
- * execvp: (libc)Executing a File.
- * exit: (libc)Normal Termination.
- * exp10: (libc)Exponents and Logarithms.
- * exp10f: (libc)Exponents and Logarithms.
- * exp10fN: (libc)Exponents and Logarithms.
- * exp10fNx: (libc)Exponents and Logarithms.
- * exp10l: (libc)Exponents and Logarithms.
- * exp10m1: (libc)Exponents and Logarithms.
- * exp10m1f: (libc)Exponents and Logarithms.
- * exp10m1fN: (libc)Exponents and Logarithms.
- * exp10m1fNx: (libc)Exponents and Logarithms.
- * exp10m1l: (libc)Exponents and Logarithms.
- * exp2: (libc)Exponents and Logarithms.
- * exp2f: (libc)Exponents and Logarithms.
- * exp2fN: (libc)Exponents and Logarithms.
- * exp2fNx: (libc)Exponents and Logarithms.
- * exp2l: (libc)Exponents and Logarithms.
- * exp2m1: (libc)Exponents and Logarithms.
- * exp2m1f: (libc)Exponents and Logarithms.
- * exp2m1fN: (libc)Exponents and Logarithms.
- * exp2m1fNx: (libc)Exponents and Logarithms.
- * exp2m1l: (libc)Exponents and Logarithms.
- * exp: (libc)Exponents and Logarithms.
- * expf: (libc)Exponents and Logarithms.
- * expfN: (libc)Exponents and Logarithms.
- * expfNx: (libc)Exponents and Logarithms.
- * expl: (libc)Exponents and Logarithms.
- * explicit_bzero: (libc)Erasing Sensitive Data.
- * expm1: (libc)Exponents and Logarithms.
- * expm1f: (libc)Exponents and Logarithms.
- * expm1fN: (libc)Exponents and Logarithms.
- * expm1fNx: (libc)Exponents and Logarithms.
- * expm1l: (libc)Exponents and Logarithms.
- * fMaddfN: (libc)Misc FP Arithmetic.
- * fMaddfNx: (libc)Misc FP Arithmetic.
- * fMdivfN: (libc)Misc FP Arithmetic.
- * fMdivfNx: (libc)Misc FP Arithmetic.
- * fMfmafN: (libc)Misc FP Arithmetic.
- * fMfmafNx: (libc)Misc FP Arithmetic.
- * fMmulfN: (libc)Misc FP Arithmetic.
- * fMmulfNx: (libc)Misc FP Arithmetic.
- * fMsqrtfN: (libc)Misc FP Arithmetic.
- * fMsqrtfNx: (libc)Misc FP Arithmetic.
- * fMsubfN: (libc)Misc FP Arithmetic.
- * fMsubfNx: (libc)Misc FP Arithmetic.
- * fMxaddfN: (libc)Misc FP Arithmetic.
- * fMxaddfNx: (libc)Misc FP Arithmetic.
- * fMxdivfN: (libc)Misc FP Arithmetic.
- * fMxdivfNx: (libc)Misc FP Arithmetic.
- * fMxfmafN: (libc)Misc FP Arithmetic.
- * fMxfmafNx: (libc)Misc FP Arithmetic.
- * fMxmulfN: (libc)Misc FP Arithmetic.
- * fMxmulfNx: (libc)Misc FP Arithmetic.
- * fMxsqrtfN: (libc)Misc FP Arithmetic.
- * fMxsqrtfNx: (libc)Misc FP Arithmetic.
- * fMxsubfN: (libc)Misc FP Arithmetic.
- * fMxsubfNx: (libc)Misc FP Arithmetic.
- * fabs: (libc)Absolute Value.
- * fabsf: (libc)Absolute Value.
- * fabsfN: (libc)Absolute Value.
- * fabsfNx: (libc)Absolute Value.
- * fabsl: (libc)Absolute Value.
- * faccessat: (libc)Testing File Access.
- * fadd: (libc)Misc FP Arithmetic.
- * faddl: (libc)Misc FP Arithmetic.
- * fchdir: (libc)Working Directory.
- * fchmod: (libc)Setting Permissions.
- * fchown: (libc)File Owner.
- * fclose: (libc)Closing Streams.
- * fcloseall: (libc)Closing Streams.
- * fcntl: (libc)Control Operations.
- * fcvt: (libc)System V Number Conversion.
- * fcvt_r: (libc)System V Number Conversion.
- * fdatasync: (libc)Synchronizing I/O.
- * fdim: (libc)Misc FP Arithmetic.
- * fdimf: (libc)Misc FP Arithmetic.
- * fdimfN: (libc)Misc FP Arithmetic.
- * fdimfNx: (libc)Misc FP Arithmetic.
- * fdiml: (libc)Misc FP Arithmetic.
- * fdiv: (libc)Misc FP Arithmetic.
- * fdivl: (libc)Misc FP Arithmetic.
- * fdopen: (libc)Descriptors and Streams.
- * fdopendir: (libc)Opening a Directory.
- * feclearexcept: (libc)Status bit operations.
- * fedisableexcept: (libc)Control Functions.
- * feenableexcept: (libc)Control Functions.
- * fegetenv: (libc)Control Functions.
- * fegetexcept: (libc)Control Functions.
- * fegetexceptflag: (libc)Status bit operations.
- * fegetmode: (libc)Control Functions.
- * fegetround: (libc)Rounding.
- * feholdexcept: (libc)Control Functions.
- * feof: (libc)EOF and Errors.
- * feof_unlocked: (libc)EOF and Errors.
- * feraiseexcept: (libc)Status bit operations.
- * ferror: (libc)EOF and Errors.
- * ferror_unlocked: (libc)EOF and Errors.
- * fesetenv: (libc)Control Functions.
- * fesetexcept: (libc)Status bit operations.
- * fesetexceptflag: (libc)Status bit operations.
- * fesetmode: (libc)Control Functions.
- * fesetround: (libc)Rounding.
- * fetestexcept: (libc)Status bit operations.
- * fetestexceptflag: (libc)Status bit operations.
- * feupdateenv: (libc)Control Functions.
- * fexecve: (libc)Executing a File.
- * fflush: (libc)Flushing Buffers.
- * fflush_unlocked: (libc)Flushing Buffers.
- * ffma: (libc)Misc FP Arithmetic.
- * ffmal: (libc)Misc FP Arithmetic.
- * fgetc: (libc)Character Input.
- * fgetc_unlocked: (libc)Character Input.
- * fgetgrent: (libc)Scanning All Groups.
- * fgetgrent_r: (libc)Scanning All Groups.
- * fgetpos64: (libc)Portable Positioning.
- * fgetpos: (libc)Portable Positioning.
- * fgetpwent: (libc)Scanning All Users.
- * fgetpwent_r: (libc)Scanning All Users.
- * fgets: (libc)Line Input.
- * fgets_unlocked: (libc)Line Input.
- * fgetwc: (libc)Character Input.
- * fgetwc_unlocked: (libc)Character Input.
- * fgetws: (libc)Line Input.
- * fgetws_unlocked: (libc)Line Input.
- * fileno: (libc)Descriptors and Streams.
- * fileno_unlocked: (libc)Descriptors and Streams.
- * finite: (libc)Floating Point Classes.
- * finitef: (libc)Floating Point Classes.
- * finitel: (libc)Floating Point Classes.
- * flockfile: (libc)Streams and Threads.
- * floor: (libc)Rounding Functions.
- * floorf: (libc)Rounding Functions.
- * floorfN: (libc)Rounding Functions.
- * floorfNx: (libc)Rounding Functions.
- * floorl: (libc)Rounding Functions.
- * fma: (libc)Misc FP Arithmetic.
- * fmaf: (libc)Misc FP Arithmetic.
- * fmafN: (libc)Misc FP Arithmetic.
- * fmafNx: (libc)Misc FP Arithmetic.
- * fmal: (libc)Misc FP Arithmetic.
- * fmax: (libc)Misc FP Arithmetic.
- * fmaxf: (libc)Misc FP Arithmetic.
- * fmaxfN: (libc)Misc FP Arithmetic.
- * fmaxfNx: (libc)Misc FP Arithmetic.
- * fmaximum: (libc)Misc FP Arithmetic.
- * fmaximum_mag: (libc)Misc FP Arithmetic.
- * fmaximum_mag_num: (libc)Misc FP Arithmetic.
- * fmaximum_mag_numf: (libc)Misc FP Arithmetic.
- * fmaximum_mag_numfN: (libc)Misc FP Arithmetic.
- * fmaximum_mag_numfNx: (libc)Misc FP Arithmetic.
- * fmaximum_mag_numl: (libc)Misc FP Arithmetic.
- * fmaximum_magf: (libc)Misc FP Arithmetic.
- * fmaximum_magfN: (libc)Misc FP Arithmetic.
- * fmaximum_magfNx: (libc)Misc FP Arithmetic.
- * fmaximum_magl: (libc)Misc FP Arithmetic.
- * fmaximum_num: (libc)Misc FP Arithmetic.
- * fmaximum_numf: (libc)Misc FP Arithmetic.
- * fmaximum_numfN: (libc)Misc FP Arithmetic.
- * fmaximum_numfNx: (libc)Misc FP Arithmetic.
- * fmaximum_numl: (libc)Misc FP Arithmetic.
- * fmaximumf: (libc)Misc FP Arithmetic.
- * fmaximumfN: (libc)Misc FP Arithmetic.
- * fmaximumfNx: (libc)Misc FP Arithmetic.
- * fmaximuml: (libc)Misc FP Arithmetic.
- * fmaxl: (libc)Misc FP Arithmetic.
- * fmaxmag: (libc)Misc FP Arithmetic.
- * fmaxmagf: (libc)Misc FP Arithmetic.
- * fmaxmagfN: (libc)Misc FP Arithmetic.
- * fmaxmagfNx: (libc)Misc FP Arithmetic.
- * fmaxmagl: (libc)Misc FP Arithmetic.
- * fmemopen: (libc)String Streams.
- * fmin: (libc)Misc FP Arithmetic.
- * fminf: (libc)Misc FP Arithmetic.
- * fminfN: (libc)Misc FP Arithmetic.
- * fminfNx: (libc)Misc FP Arithmetic.
- * fminimum: (libc)Misc FP Arithmetic.
- * fminimum_mag: (libc)Misc FP Arithmetic.
- * fminimum_mag_num: (libc)Misc FP Arithmetic.
- * fminimum_mag_numf: (libc)Misc FP Arithmetic.
- * fminimum_mag_numfN: (libc)Misc FP Arithmetic.
- * fminimum_mag_numfNx: (libc)Misc FP Arithmetic.
- * fminimum_mag_numl: (libc)Misc FP Arithmetic.
- * fminimum_magf: (libc)Misc FP Arithmetic.
- * fminimum_magfN: (libc)Misc FP Arithmetic.
- * fminimum_magfNx: (libc)Misc FP Arithmetic.
- * fminimum_magl: (libc)Misc FP Arithmetic.
- * fminimum_num: (libc)Misc FP Arithmetic.
- * fminimum_numf: (libc)Misc FP Arithmetic.
- * fminimum_numfN: (libc)Misc FP Arithmetic.
- * fminimum_numfNx: (libc)Misc FP Arithmetic.
- * fminimum_numl: (libc)Misc FP Arithmetic.
- * fminimumf: (libc)Misc FP Arithmetic.
- * fminimumfN: (libc)Misc FP Arithmetic.
- * fminimumfNx: (libc)Misc FP Arithmetic.
- * fminimuml: (libc)Misc FP Arithmetic.
- * fminl: (libc)Misc FP Arithmetic.
- * fminmag: (libc)Misc FP Arithmetic.
- * fminmagf: (libc)Misc FP Arithmetic.
- * fminmagfN: (libc)Misc FP Arithmetic.
- * fminmagfNx: (libc)Misc FP Arithmetic.
- * fminmagl: (libc)Misc FP Arithmetic.
- * fmod: (libc)Remainder Functions.
- * fmodf: (libc)Remainder Functions.
- * fmodfN: (libc)Remainder Functions.
- * fmodfNx: (libc)Remainder Functions.
- * fmodl: (libc)Remainder Functions.
- * fmtmsg: (libc)Printing Formatted Messages.
- * fmul: (libc)Misc FP Arithmetic.
- * fmull: (libc)Misc FP Arithmetic.
- * fnmatch: (libc)Wildcard Matching.
- * fopen64: (libc)Opening Streams.
- * fopen: (libc)Opening Streams.
- * fopencookie: (libc)Streams and Cookies.
- * fork: (libc)Creating a Process.
- * forkpty: (libc)Pseudo-Terminal Pairs.
- * fpathconf: (libc)Pathconf.
- * fpclassify: (libc)Floating Point Classes.
- * fprintf: (libc)Formatted Output Functions.
- * fputc: (libc)Simple Output.
- * fputc_unlocked: (libc)Simple Output.
- * fputs: (libc)Simple Output.
- * fputs_unlocked: (libc)Simple Output.
- * fputwc: (libc)Simple Output.
- * fputwc_unlocked: (libc)Simple Output.
- * fputws: (libc)Simple Output.
- * fputws_unlocked: (libc)Simple Output.
- * fread: (libc)Block Input/Output.
- * fread_unlocked: (libc)Block Input/Output.
- * free: (libc)Freeing after Malloc.
- * free_aligned_sized: (libc)Freeing after Malloc.
- * free_sized: (libc)Freeing after Malloc.
- * freopen64: (libc)Opening Streams.
- * freopen: (libc)Opening Streams.
- * frexp: (libc)Normalization Functions.
- * frexpf: (libc)Normalization Functions.
- * frexpfN: (libc)Normalization Functions.
- * frexpfNx: (libc)Normalization Functions.
- * frexpl: (libc)Normalization Functions.
- * fromfp: (libc)Rounding Functions.
- * fromfpf: (libc)Rounding Functions.
- * fromfpfN: (libc)Rounding Functions.
- * fromfpfNx: (libc)Rounding Functions.
- * fromfpl: (libc)Rounding Functions.
- * fromfpx: (libc)Rounding Functions.
- * fromfpxf: (libc)Rounding Functions.
- * fromfpxfN: (libc)Rounding Functions.
- * fromfpxfNx: (libc)Rounding Functions.
- * fromfpxl: (libc)Rounding Functions.
- * fscanf: (libc)Formatted Input Functions.
- * fseek: (libc)File Positioning.
- * fseeko64: (libc)File Positioning.
- * fseeko: (libc)File Positioning.
- * fsetpos64: (libc)Portable Positioning.
- * fsetpos: (libc)Portable Positioning.
- * fsqrt: (libc)Misc FP Arithmetic.
- * fsqrtl: (libc)Misc FP Arithmetic.
- * fstat64: (libc)Reading Attributes.
- * fstat: (libc)Reading Attributes.
- * fstatat64: (libc)Reading Attributes.
- * fstatat: (libc)Reading Attributes.
- * fsub: (libc)Misc FP Arithmetic.
- * fsubl: (libc)Misc FP Arithmetic.
- * fsync: (libc)Synchronizing I/O.
- * ftell: (libc)File Positioning.
- * ftello64: (libc)File Positioning.
- * ftello: (libc)File Positioning.
- * ftruncate64: (libc)File Size.
- * ftruncate: (libc)File Size.
- * ftrylockfile: (libc)Streams and Threads.
- * ftw64: (libc)Working with Directory Trees.
- * ftw: (libc)Working with Directory Trees.
- * funlockfile: (libc)Streams and Threads.
- * futimens: (libc)File Times.
- * futimes: (libc)File Times.
- * fwide: (libc)Streams and I18N.
- * fwprintf: (libc)Formatted Output Functions.
- * fwrite: (libc)Block Input/Output.
- * fwrite_unlocked: (libc)Block Input/Output.
- * fwscanf: (libc)Formatted Input Functions.
- * gamma: (libc)Special Functions.
- * gammaf: (libc)Special Functions.
- * gammal: (libc)Special Functions.
- * gcvt: (libc)System V Number Conversion.
- * get_avphys_pages: (libc)Query Memory Parameters.
- * get_current_dir_name: (libc)Working Directory.
- * get_nprocs: (libc)Processor Resources.
- * get_nprocs_conf: (libc)Processor Resources.
- * get_phys_pages: (libc)Query Memory Parameters.
- * getauxval: (libc)Auxiliary Vector.
- * getc: (libc)Character Input.
- * getc_unlocked: (libc)Character Input.
- * getchar: (libc)Character Input.
- * getchar_unlocked: (libc)Character Input.
- * getcontext: (libc)System V contexts.
- * getcpu: (libc)CPU Affinity.
- * getcwd: (libc)Working Directory.
- * getdate: (libc)General Time String Parsing.
- * getdate_r: (libc)General Time String Parsing.
- * getdelim: (libc)Line Input.
- * getdents64: (libc)Low-level Directory Access.
- * getdomainname: (libc)Host Identification.
- * getegid: (libc)Reading Persona.
- * getentropy: (libc)Unpredictable Bytes.
- * getenv: (libc)Environment Access.
- * geteuid: (libc)Reading Persona.
- * getfsent: (libc)fstab.
- * getfsfile: (libc)fstab.
- * getfsspec: (libc)fstab.
- * getgid: (libc)Reading Persona.
- * getgrent: (libc)Scanning All Groups.
- * getgrent_r: (libc)Scanning All Groups.
- * getgrgid: (libc)Lookup Group.
- * getgrgid_r: (libc)Lookup Group.
- * getgrnam: (libc)Lookup Group.
- * getgrnam_r: (libc)Lookup Group.
- * getgrouplist: (libc)Setting Groups.
- * getgroups: (libc)Reading Persona.
- * gethostbyaddr: (libc)Host Names.
- * gethostbyaddr_r: (libc)Host Names.
- * gethostbyname2: (libc)Host Names.
- * gethostbyname2_r: (libc)Host Names.
- * gethostbyname: (libc)Host Names.
- * gethostbyname_r: (libc)Host Names.
- * gethostent: (libc)Host Names.
- * gethostid: (libc)Host Identification.
- * gethostname: (libc)Host Identification.
- * getitimer: (libc)Setting an Alarm.
- * getline: (libc)Line Input.
- * getloadavg: (libc)Processor Resources.
- * getlogin: (libc)Who Logged In.
- * getmntent: (libc)mtab.
- * getmntent_r: (libc)mtab.
- * getnetbyaddr: (libc)Networks Database.
- * getnetbyname: (libc)Networks Database.
- * getnetent: (libc)Networks Database.
- * getnetgrent: (libc)Lookup Netgroup.
- * getnetgrent_r: (libc)Lookup Netgroup.
- * getopt: (libc)Using Getopt.
- * getopt_long: (libc)Getopt Long Options.
- * getopt_long_only: (libc)Getopt Long Options.
- * getpagesize: (libc)Query Memory Parameters.
- * getpass: (libc)getpass.
- * getpayload: (libc)FP Bit Twiddling.
- * getpayloadf: (libc)FP Bit Twiddling.
- * getpayloadfN: (libc)FP Bit Twiddling.
- * getpayloadfNx: (libc)FP Bit Twiddling.
- * getpayloadl: (libc)FP Bit Twiddling.
- * getpeername: (libc)Who is Connected.
- * getpgid: (libc)Process Group Functions.
- * getpgrp: (libc)Process Group Functions.
- * getpid: (libc)Process Identification.
- * getppid: (libc)Process Identification.
- * getpriority: (libc)Traditional Scheduling Functions.
- * getprotobyname: (libc)Protocols Database.
- * getprotobynumber: (libc)Protocols Database.
- * getprotoent: (libc)Protocols Database.
- * getpt: (libc)Allocation.
- * getpwent: (libc)Scanning All Users.
- * getpwent_r: (libc)Scanning All Users.
- * getpwnam: (libc)Lookup User.
- * getpwnam_r: (libc)Lookup User.
- * getpwuid: (libc)Lookup User.
- * getpwuid_r: (libc)Lookup User.
- * getrandom: (libc)Unpredictable Bytes.
- * getrlimit64: (libc)Limits on Resources.
- * getrlimit: (libc)Limits on Resources.
- * getrusage: (libc)Resource Usage.
- * gets: (libc)Line Input.
- * getservbyname: (libc)Services Database.
- * getservbyport: (libc)Services Database.
- * getservent: (libc)Services Database.
- * getsid: (libc)Process Group Functions.
- * getsockname: (libc)Reading Address.
- * getsockopt: (libc)Socket Option Functions.
- * getsubopt: (libc)Suboptions.
- * gettext: (libc)Translation with gettext.
- * gettid: (libc)Process Identification.
- * gettimeofday: (libc)Getting the Time.
- * getuid: (libc)Reading Persona.
- * getumask: (libc)Setting Permissions.
- * getutent: (libc)Manipulating the Database.
- * getutent_r: (libc)Manipulating the Database.
- * getutid: (libc)Manipulating the Database.
- * getutid_r: (libc)Manipulating the Database.
- * getutline: (libc)Manipulating the Database.
- * getutline_r: (libc)Manipulating the Database.
- * getutmp: (libc)XPG Functions.
- * getutmpx: (libc)XPG Functions.
- * getutxent: (libc)XPG Functions.
- * getutxid: (libc)XPG Functions.
- * getutxline: (libc)XPG Functions.
- * getw: (libc)Character Input.
- * getwc: (libc)Character Input.
- * getwc_unlocked: (libc)Character Input.
- * getwchar: (libc)Character Input.
- * getwchar_unlocked: (libc)Character Input.
- * getwd: (libc)Working Directory.
- * glob64: (libc)Calling Glob.
- * glob: (libc)Calling Glob.
- * globfree64: (libc)More Flags for Globbing.
- * globfree: (libc)More Flags for Globbing.
- * gmtime: (libc)Broken-down Time.
- * gmtime_r: (libc)Broken-down Time.
- * grantpt: (libc)Allocation.
- * gsignal: (libc)Signaling Yourself.
- * gtty: (libc)BSD Terminal Modes.
- * hasmntopt: (libc)mtab.
- * hcreate: (libc)Hash Search Function.
- * hcreate_r: (libc)Hash Search Function.
- * hdestroy: (libc)Hash Search Function.
- * hdestroy_r: (libc)Hash Search Function.
- * hsearch: (libc)Hash Search Function.
- * hsearch_r: (libc)Hash Search Function.
- * htonl: (libc)Byte Order.
- * htons: (libc)Byte Order.
- * hypot: (libc)Exponents and Logarithms.
- * hypotf: (libc)Exponents and Logarithms.
- * hypotfN: (libc)Exponents and Logarithms.
- * hypotfNx: (libc)Exponents and Logarithms.
- * hypotl: (libc)Exponents and Logarithms.
- * iconv: (libc)Generic Conversion Interface.
- * iconv_close: (libc)Generic Conversion Interface.
- * iconv_open: (libc)Generic Conversion Interface.
- * if_freenameindex: (libc)Interface Naming.
- * if_indextoname: (libc)Interface Naming.
- * if_nameindex: (libc)Interface Naming.
- * if_nametoindex: (libc)Interface Naming.
- * ilogb: (libc)Exponents and Logarithms.
- * ilogbf: (libc)Exponents and Logarithms.
- * ilogbfN: (libc)Exponents and Logarithms.
- * ilogbfNx: (libc)Exponents and Logarithms.
- * ilogbl: (libc)Exponents and Logarithms.
- * imaxabs: (libc)Absolute Value.
- * imaxdiv: (libc)Integer Division.
- * in6addr_any: (libc)Host Address Data Type.
- * in6addr_loopback: (libc)Host Address Data Type.
- * index: (libc)Search Functions.
- * inet_addr: (libc)Host Address Functions.
- * inet_aton: (libc)Host Address Functions.
- * inet_lnaof: (libc)Host Address Functions.
- * inet_makeaddr: (libc)Host Address Functions.
- * inet_netof: (libc)Host Address Functions.
- * inet_network: (libc)Host Address Functions.
- * inet_ntoa: (libc)Host Address Functions.
- * inet_ntop: (libc)Host Address Functions.
- * inet_pton: (libc)Host Address Functions.
- * initgroups: (libc)Setting Groups.
- * initstate: (libc)BSD Random.
- * initstate_r: (libc)BSD Random.
- * innetgr: (libc)Netgroup Membership.
- * ioctl: (libc)IOCTLs.
- * isalnum: (libc)Classification of Characters.
- * isalpha: (libc)Classification of Characters.
- * isascii: (libc)Classification of Characters.
- * isatty: (libc)Is It a Terminal.
- * isblank: (libc)Classification of Characters.
- * iscanonical: (libc)Floating Point Classes.
- * iscntrl: (libc)Classification of Characters.
- * isdigit: (libc)Classification of Characters.
- * iseqsig: (libc)FP Comparison Functions.
- * isfinite: (libc)Floating Point Classes.
- * isgraph: (libc)Classification of Characters.
- * isgreater: (libc)FP Comparison Functions.
- * isgreaterequal: (libc)FP Comparison Functions.
- * isinf: (libc)Floating Point Classes.
- * isinff: (libc)Floating Point Classes.
- * isinfl: (libc)Floating Point Classes.
- * isless: (libc)FP Comparison Functions.
- * islessequal: (libc)FP Comparison Functions.
- * islessgreater: (libc)FP Comparison Functions.
- * islower: (libc)Classification of Characters.
- * isnan: (libc)Floating Point Classes.
- * isnan: (libc)Floating Point Classes.
- * isnanf: (libc)Floating Point Classes.
- * isnanl: (libc)Floating Point Classes.
- * isnormal: (libc)Floating Point Classes.
- * isprint: (libc)Classification of Characters.
- * ispunct: (libc)Classification of Characters.
- * issignaling: (libc)Floating Point Classes.
- * isspace: (libc)Classification of Characters.
- * issubnormal: (libc)Floating Point Classes.
- * isunordered: (libc)FP Comparison Functions.
- * isupper: (libc)Classification of Characters.
- * iswalnum: (libc)Classification of Wide Characters.
- * iswalpha: (libc)Classification of Wide Characters.
- * iswblank: (libc)Classification of Wide Characters.
- * iswcntrl: (libc)Classification of Wide Characters.
- * iswctype: (libc)Classification of Wide Characters.
- * iswdigit: (libc)Classification of Wide Characters.
- * iswgraph: (libc)Classification of Wide Characters.
- * iswlower: (libc)Classification of Wide Characters.
- * iswprint: (libc)Classification of Wide Characters.
- * iswpunct: (libc)Classification of Wide Characters.
- * iswspace: (libc)Classification of Wide Characters.
- * iswupper: (libc)Classification of Wide Characters.
- * iswxdigit: (libc)Classification of Wide Characters.
- * isxdigit: (libc)Classification of Characters.
- * iszero: (libc)Floating Point Classes.
- * j0: (libc)Special Functions.
- * j0f: (libc)Special Functions.
- * j0fN: (libc)Special Functions.
- * j0fNx: (libc)Special Functions.
- * j0l: (libc)Special Functions.
- * j1: (libc)Special Functions.
- * j1f: (libc)Special Functions.
- * j1fN: (libc)Special Functions.
- * j1fNx: (libc)Special Functions.
- * j1l: (libc)Special Functions.
- * jn: (libc)Special Functions.
- * jnf: (libc)Special Functions.
- * jnfN: (libc)Special Functions.
- * jnfNx: (libc)Special Functions.
- * jnl: (libc)Special Functions.
- * jrand48: (libc)SVID Random.
- * jrand48_r: (libc)SVID Random.
- * kill: (libc)Signaling Another Process.
- * killpg: (libc)Signaling Another Process.
- * l64a: (libc)Encode Binary Data.
- * labs: (libc)Absolute Value.
- * lcong48: (libc)SVID Random.
- * lcong48_r: (libc)SVID Random.
- * ldexp: (libc)Normalization Functions.
- * ldexpf: (libc)Normalization Functions.
- * ldexpfN: (libc)Normalization Functions.
- * ldexpfNx: (libc)Normalization Functions.
- * ldexpl: (libc)Normalization Functions.
- * ldiv: (libc)Integer Division.
- * lfind: (libc)Array Search Function.
- * lgamma: (libc)Special Functions.
- * lgamma_r: (libc)Special Functions.
- * lgammaf: (libc)Special Functions.
- * lgammafN: (libc)Special Functions.
- * lgammafN_r: (libc)Special Functions.
- * lgammafNx: (libc)Special Functions.
- * lgammafNx_r: (libc)Special Functions.
- * lgammaf_r: (libc)Special Functions.
- * lgammal: (libc)Special Functions.
- * lgammal_r: (libc)Special Functions.
- * link: (libc)Hard Links.
- * linkat: (libc)Hard Links.
- * lio_listio64: (libc)Asynchronous Reads/Writes.
- * lio_listio: (libc)Asynchronous Reads/Writes.
- * listen: (libc)Listening.
- * llabs: (libc)Absolute Value.
- * lldiv: (libc)Integer Division.
- * llogb: (libc)Exponents and Logarithms.
- * llogbf: (libc)Exponents and Logarithms.
- * llogbfN: (libc)Exponents and Logarithms.
- * llogbfNx: (libc)Exponents and Logarithms.
- * llogbl: (libc)Exponents and Logarithms.
- * llrint: (libc)Rounding Functions.
- * llrintf: (libc)Rounding Functions.
- * llrintfN: (libc)Rounding Functions.
- * llrintfNx: (libc)Rounding Functions.
- * llrintl: (libc)Rounding Functions.
- * llround: (libc)Rounding Functions.
- * llroundf: (libc)Rounding Functions.
- * llroundfN: (libc)Rounding Functions.
- * llroundfNx: (libc)Rounding Functions.
- * llroundl: (libc)Rounding Functions.
- * localeconv: (libc)The Lame Way to Locale Data.
- * localtime: (libc)Broken-down Time.
- * localtime_r: (libc)Broken-down Time.
- * log10: (libc)Exponents and Logarithms.
- * log10f: (libc)Exponents and Logarithms.
- * log10fN: (libc)Exponents and Logarithms.
- * log10fNx: (libc)Exponents and Logarithms.
- * log10l: (libc)Exponents and Logarithms.
- * log10p1: (libc)Exponents and Logarithms.
- * log10p1f: (libc)Exponents and Logarithms.
- * log10p1fN: (libc)Exponents and Logarithms.
- * log10p1fNx: (libc)Exponents and Logarithms.
- * log10p1l: (libc)Exponents and Logarithms.
- * log1p: (libc)Exponents and Logarithms.
- * log1pf: (libc)Exponents and Logarithms.
- * log1pfN: (libc)Exponents and Logarithms.
- * log1pfNx: (libc)Exponents and Logarithms.
- * log1pl: (libc)Exponents and Logarithms.
- * log2: (libc)Exponents and Logarithms.
- * log2f: (libc)Exponents and Logarithms.
- * log2fN: (libc)Exponents and Logarithms.
- * log2fNx: (libc)Exponents and Logarithms.
- * log2l: (libc)Exponents and Logarithms.
- * log2p1: (libc)Exponents and Logarithms.
- * log2p1f: (libc)Exponents and Logarithms.
- * log2p1fN: (libc)Exponents and Logarithms.
- * log2p1fNx: (libc)Exponents and Logarithms.
- * log2p1l: (libc)Exponents and Logarithms.
- * log: (libc)Exponents and Logarithms.
- * logb: (libc)Exponents and Logarithms.
- * logbf: (libc)Exponents and Logarithms.
- * logbfN: (libc)Exponents and Logarithms.
- * logbfNx: (libc)Exponents and Logarithms.
- * logbl: (libc)Exponents and Logarithms.
- * logf: (libc)Exponents and Logarithms.
- * logfN: (libc)Exponents and Logarithms.
- * logfNx: (libc)Exponents and Logarithms.
- * login: (libc)Logging In and Out.
- * login_tty: (libc)Logging In and Out.
- * logl: (libc)Exponents and Logarithms.
- * logout: (libc)Logging In and Out.
- * logp1: (libc)Exponents and Logarithms.
- * logp1f: (libc)Exponents and Logarithms.
- * logp1fN: (libc)Exponents and Logarithms.
- * logp1fNx: (libc)Exponents and Logarithms.
- * logp1l: (libc)Exponents and Logarithms.
- * logwtmp: (libc)Logging In and Out.
- * longjmp: (libc)Non-Local Details.
- * lrand48: (libc)SVID Random.
- * lrand48_r: (libc)SVID Random.
- * lrint: (libc)Rounding Functions.
- * lrintf: (libc)Rounding Functions.
- * lrintfN: (libc)Rounding Functions.
- * lrintfNx: (libc)Rounding Functions.
- * lrintl: (libc)Rounding Functions.
- * lround: (libc)Rounding Functions.
- * lroundf: (libc)Rounding Functions.
- * lroundfN: (libc)Rounding Functions.
- * lroundfNx: (libc)Rounding Functions.
- * lroundl: (libc)Rounding Functions.
- * lsearch: (libc)Array Search Function.
- * lseek64: (libc)File Position Primitive.
- * lseek: (libc)File Position Primitive.
- * lstat64: (libc)Reading Attributes.
- * lstat: (libc)Reading Attributes.
- * lutimes: (libc)File Times.
- * madvise: (libc)Memory-mapped I/O.
- * makecontext: (libc)System V contexts.
- * mallinfo2: (libc)Statistics of Malloc.
- * malloc: (libc)Basic Allocation.
- * mallopt: (libc)Malloc Tunable Parameters.
- * mblen: (libc)Non-reentrant Character Conversion.
- * mbrlen: (libc)Converting a Character.
- * mbrtowc: (libc)Converting a Character.
- * mbsinit: (libc)Keeping the state.
- * mbsnrtowcs: (libc)Converting Strings.
- * mbsrtowcs: (libc)Converting Strings.
- * mbstowcs: (libc)Non-reentrant String Conversion.
- * mbtowc: (libc)Non-reentrant Character Conversion.
- * mcheck: (libc)Heap Consistency Checking.
- * memalign: (libc)Aligned Memory Blocks.
- * memalignment: (libc)Aligned Memory Blocks.
- * memccpy: (libc)Copying Strings and Arrays.
- * memchr: (libc)Search Functions.
- * memcmp: (libc)String/Array Comparison.
- * memcpy: (libc)Copying Strings and Arrays.
- * memfd_create: (libc)Memory-mapped I/O.
- * memfrob: (libc)Obfuscating Data.
- * memmem: (libc)Search Functions.
- * memmove: (libc)Copying Strings and Arrays.
- * mempcpy: (libc)Copying Strings and Arrays.
- * memrchr: (libc)Search Functions.
- * memset: (libc)Copying Strings and Arrays.
- * memset_explicit: (libc)Erasing Sensitive Data.
- * mkdir: (libc)Creating Directories.
- * mkdirat: (libc)Creating Directories.
- * mkdtemp: (libc)Temporary Files.
- * mkfifo: (libc)FIFO Special Files.
- * mknod: (libc)Making Special Files.
- * mkstemp: (libc)Temporary Files.
- * mktemp: (libc)Temporary Files.
- * mktime: (libc)Broken-down Time.
- * mlock2: (libc)Page Lock Functions.
- * mlock: (libc)Page Lock Functions.
- * mlockall: (libc)Page Lock Functions.
- * mmap64: (libc)Memory-mapped I/O.
- * mmap: (libc)Memory-mapped I/O.
- * modf: (libc)Rounding Functions.
- * modff: (libc)Rounding Functions.
- * modffN: (libc)Rounding Functions.
- * modffNx: (libc)Rounding Functions.
- * modfl: (libc)Rounding Functions.
- * mount: (libc)Mount-Unmount-Remount.
- * mprobe: (libc)Heap Consistency Checking.
- * mprotect: (libc)Memory Protection.
- * mrand48: (libc)SVID Random.
- * mrand48_r: (libc)SVID Random.
- * mremap: (libc)Memory-mapped I/O.
- * mseal: (libc)Memory Protection.
- * msync: (libc)Memory-mapped I/O.
- * mtrace: (libc)Tracing malloc.
- * mtx_destroy: (libc)ISO C Mutexes.
- * mtx_init: (libc)ISO C Mutexes.
- * mtx_lock: (libc)ISO C Mutexes.
- * mtx_timedlock: (libc)ISO C Mutexes.
- * mtx_trylock: (libc)ISO C Mutexes.
- * mtx_unlock: (libc)ISO C Mutexes.
- * munlock: (libc)Page Lock Functions.
- * munlockall: (libc)Page Lock Functions.
- * munmap: (libc)Memory-mapped I/O.
- * muntrace: (libc)Tracing malloc.
- * nan: (libc)FP Bit Twiddling.
- * nanf: (libc)FP Bit Twiddling.
- * nanfN: (libc)FP Bit Twiddling.
- * nanfNx: (libc)FP Bit Twiddling.
- * nanl: (libc)FP Bit Twiddling.
- * nanosleep: (libc)Sleeping.
- * nearbyint: (libc)Rounding Functions.
- * nearbyintf: (libc)Rounding Functions.
- * nearbyintfN: (libc)Rounding Functions.
- * nearbyintfNx: (libc)Rounding Functions.
- * nearbyintl: (libc)Rounding Functions.
- * nextafter: (libc)FP Bit Twiddling.
- * nextafterf: (libc)FP Bit Twiddling.
- * nextafterfN: (libc)FP Bit Twiddling.
- * nextafterfNx: (libc)FP Bit Twiddling.
- * nextafterl: (libc)FP Bit Twiddling.
- * nextdown: (libc)FP Bit Twiddling.
- * nextdownf: (libc)FP Bit Twiddling.
- * nextdownfN: (libc)FP Bit Twiddling.
- * nextdownfNx: (libc)FP Bit Twiddling.
- * nextdownl: (libc)FP Bit Twiddling.
- * nexttoward: (libc)FP Bit Twiddling.
- * nexttowardf: (libc)FP Bit Twiddling.
- * nexttowardl: (libc)FP Bit Twiddling.
- * nextup: (libc)FP Bit Twiddling.
- * nextupf: (libc)FP Bit Twiddling.
- * nextupfN: (libc)FP Bit Twiddling.
- * nextupfNx: (libc)FP Bit Twiddling.
- * nextupl: (libc)FP Bit Twiddling.
- * nftw64: (libc)Working with Directory Trees.
- * nftw: (libc)Working with Directory Trees.
- * ngettext: (libc)Advanced gettext functions.
- * nice: (libc)Traditional Scheduling Functions.
- * nl_langinfo: (libc)The Elegant and Fast Way.
- * nrand48: (libc)SVID Random.
- * nrand48_r: (libc)SVID Random.
- * ntohl: (libc)Byte Order.
- * ntohs: (libc)Byte Order.
- * ntp_adjtime: (libc)Setting and Adjusting the Time.
- * ntp_gettime: (libc)Setting and Adjusting the Time.
- * obstack_1grow: (libc)Growing Objects.
- * obstack_1grow_fast: (libc)Extra Fast Growing.
- * obstack_alignment_mask: (libc)Obstacks Data Alignment.
- * obstack_alloc: (libc)Allocation in an Obstack.
- * obstack_base: (libc)Status of an Obstack.
- * obstack_blank: (libc)Growing Objects.
- * obstack_blank_fast: (libc)Extra Fast Growing.
- * obstack_chunk_size: (libc)Obstack Chunks.
- * obstack_copy0: (libc)Allocation in an Obstack.
- * obstack_copy: (libc)Allocation in an Obstack.
- * obstack_finish: (libc)Growing Objects.
- * obstack_free: (libc)Freeing Obstack Objects.
- * obstack_grow0: (libc)Growing Objects.
- * obstack_grow: (libc)Growing Objects.
- * obstack_init: (libc)Preparing for Obstacks.
- * obstack_int_grow: (libc)Growing Objects.
- * obstack_int_grow_fast: (libc)Extra Fast Growing.
- * obstack_next_free: (libc)Status of an Obstack.
- * obstack_object_size: (libc)Growing Objects.
- * obstack_object_size: (libc)Status of an Obstack.
- * obstack_printf: (libc)Dynamic Output.
- * obstack_ptr_grow: (libc)Growing Objects.
- * obstack_ptr_grow_fast: (libc)Extra Fast Growing.
- * obstack_room: (libc)Extra Fast Growing.
- * obstack_vprintf: (libc)Variable Arguments Output.
- * offsetof: (libc)Structure Measurement.
- * on_exit: (libc)Cleanups on Exit.
- * open64: (libc)Opening and Closing Files.
- * open: (libc)Opening and Closing Files.
- * open_memstream: (libc)String Streams.
- * openat2: (libc)Opening and Closing Files.
- * openat64: (libc)Opening and Closing Files.
- * openat: (libc)Opening and Closing Files.
- * opendir: (libc)Opening a Directory.
- * openlog: (libc)openlog.
- * openpty: (libc)Pseudo-Terminal Pairs.
- * parse_printf_format: (libc)Parsing a Template String.
- * pathconf: (libc)Pathconf.
- * pause: (libc)Using Pause.
- * pclose: (libc)Pipe to a Subprocess.
- * perror: (libc)Error Messages.
- * pidfd_getpid: (libc)Querying a Process.
- * pipe: (libc)Creating a Pipe.
- * pkey_alloc: (libc)Memory Protection.
- * pkey_free: (libc)Memory Protection.
- * pkey_get: (libc)Memory Protection.
- * pkey_mprotect: (libc)Memory Protection.
- * pkey_set: (libc)Memory Protection.
- * poll: (libc)Other Low-Level I/O APIs.
- * popen: (libc)Pipe to a Subprocess.
- * posix_fallocate64: (libc)Storage Allocation.
- * posix_fallocate: (libc)Storage Allocation.
- * posix_memalign: (libc)Aligned Memory Blocks.
- * posix_openpt: (libc)Allocation.
- * pow: (libc)Exponents and Logarithms.
- * powf: (libc)Exponents and Logarithms.
- * powfN: (libc)Exponents and Logarithms.
- * powfNx: (libc)Exponents and Logarithms.
- * powl: (libc)Exponents and Logarithms.
- * pown: (libc)Exponents and Logarithms.
- * pownf: (libc)Exponents and Logarithms.
- * pownfN: (libc)Exponents and Logarithms.
- * pownfNx: (libc)Exponents and Logarithms.
- * pownl: (libc)Exponents and Logarithms.
- * powr: (libc)Exponents and Logarithms.
- * powrf: (libc)Exponents and Logarithms.
- * powrfN: (libc)Exponents and Logarithms.
- * powrfNx: (libc)Exponents and Logarithms.
- * powrl: (libc)Exponents and Logarithms.
- * pread64: (libc)I/O Primitives.
- * pread: (libc)I/O Primitives.
- * preadv2: (libc)Scatter-Gather.
- * preadv64: (libc)Scatter-Gather.
- * preadv64v2: (libc)Scatter-Gather.
- * preadv: (libc)Scatter-Gather.
- * printf: (libc)Formatted Output Functions.
- * printf_size: (libc)Predefined Printf Handlers.
- * printf_size_info: (libc)Predefined Printf Handlers.
- * psignal: (libc)Signal Messages.
- * pthread_attr_destroy: (libc)Creating and Destroying Threads.
- * pthread_attr_getaffinity_np: (libc)Thread CPU Affinity.
- * pthread_attr_getdetachstate: (libc)Creating and Destroying Threads.
- * pthread_attr_getsigmask_np: (libc)Initial Thread Signal Mask.
- * pthread_attr_init: (libc)Creating and Destroying Threads.
- * pthread_attr_setaffinity_np: (libc)Thread CPU Affinity.
- * pthread_attr_setdetachstate: (libc)Creating and Destroying Threads.
- * pthread_attr_setsigmask_np: (libc)Initial Thread Signal Mask.
- * pthread_barrier_destroy: (libc)POSIX Barriers.
- * pthread_barrier_init: (libc)POSIX Barriers.
- * pthread_barrier_wait: (libc)POSIX Barriers.
- * pthread_clockjoin_np: (libc)Joining Threads.
- * pthread_cond_clockwait: (libc)Waiting with Explicit Clocks.
- * pthread_create: (libc)Creating and Destroying Threads.
- * pthread_detach: (libc)Creating and Destroying Threads.
- * pthread_equal: (libc)POSIX Threads Other APIs.
- * pthread_getaffinity_np: (libc)Thread CPU Affinity.
- * pthread_getattr_default_np: (libc)Default Thread Attributes.
- * pthread_getcpuclockid: (libc)POSIX Threads Other APIs.
- * pthread_getname_np: (libc)Thread Names.
- * pthread_getspecific: (libc)Thread-specific Data.
- * pthread_gettid_np: (libc)Process Identification.
- * pthread_join: (libc)Creating and Destroying Threads.
- * pthread_key_create: (libc)Thread-specific Data.
- * pthread_key_delete: (libc)Thread-specific Data.
- * pthread_kill: (libc)Creating and Destroying Threads.
- * pthread_mutex_clocklock: (libc)POSIX Mutexes.
- * pthread_mutex_destroy: (libc)POSIX Mutexes.
- * pthread_mutex_init: (libc)POSIX Mutexes.
- * pthread_mutex_lock: (libc)POSIX Mutexes.
- * pthread_mutex_timedlock: (libc)POSIX Mutexes.
- * pthread_mutex_trylock: (libc)POSIX Mutexes.
- * pthread_mutex_unlock: (libc)POSIX Mutexes.
- * pthread_mutexattr_destroy: (libc)POSIX Mutexes.
- * pthread_mutexattr_gettype: (libc)POSIX Mutexes.
- * pthread_mutexattr_init: (libc)POSIX Mutexes.
- * pthread_mutexattr_settype: (libc)POSIX Mutexes.
- * pthread_once: (libc)POSIX Threads Other APIs.
- * pthread_rwlock_clockrdlock: (libc)Waiting with Explicit Clocks.
- * pthread_rwlock_clockwrlock: (libc)Waiting with Explicit Clocks.
- * pthread_self: (libc)Creating and Destroying Threads.
- * pthread_setaffinity_np: (libc)Thread CPU Affinity.
- * pthread_setattr_default_np: (libc)Default Thread Attributes.
- * pthread_setname_np: (libc)Thread Names.
- * pthread_setspecific: (libc)Thread-specific Data.
- * pthread_sigmask: (libc)POSIX Threads Other APIs.
- * pthread_spin_destroy: (libc)POSIX Spin Locks.
- * pthread_spin_init: (libc)POSIX Spin Locks.
- * pthread_spin_lock: (libc)POSIX Spin Locks.
- * pthread_spin_trylock: (libc)POSIX Spin Locks.
- * pthread_spin_unlock: (libc)POSIX Spin Locks.
- * pthread_timedjoin_np: (libc)Joining Threads.
- * pthread_tryjoin_np: (libc)Joining Threads.
- * ptsname: (libc)Allocation.
- * ptsname_r: (libc)Allocation.
- * putc: (libc)Simple Output.
- * putc_unlocked: (libc)Simple Output.
- * putchar: (libc)Simple Output.
- * putchar_unlocked: (libc)Simple Output.
- * putenv: (libc)Environment Access.
- * putpwent: (libc)Writing a User Entry.
- * puts: (libc)Simple Output.
- * pututline: (libc)Manipulating the Database.
- * pututxline: (libc)XPG Functions.
- * putw: (libc)Simple Output.
- * putwc: (libc)Simple Output.
- * putwc_unlocked: (libc)Simple Output.
- * putwchar: (libc)Simple Output.
- * putwchar_unlocked: (libc)Simple Output.
- * pwrite64: (libc)I/O Primitives.
- * pwrite: (libc)I/O Primitives.
- * pwritev2: (libc)Scatter-Gather.
- * pwritev64: (libc)Scatter-Gather.
- * pwritev64v2: (libc)Scatter-Gather.
- * pwritev: (libc)Scatter-Gather.
- * qecvt: (libc)System V Number Conversion.
- * qecvt_r: (libc)System V Number Conversion.
- * qfcvt: (libc)System V Number Conversion.
- * qfcvt_r: (libc)System V Number Conversion.
- * qgcvt: (libc)System V Number Conversion.
- * qsort: (libc)Array Sort Function.
- * raise: (libc)Signaling Yourself.
- * rand: (libc)ISO Random.
- * rand_r: (libc)ISO Random.
- * random: (libc)BSD Random.
- * random_r: (libc)BSD Random.
- * rawmemchr: (libc)Search Functions.
- * read: (libc)I/O Primitives.
- * readdir64: (libc)Reading/Closing Directory.
- * readdir64_r: (libc)Reading/Closing Directory.
- * readdir: (libc)Reading/Closing Directory.
- * readdir_r: (libc)Reading/Closing Directory.
- * readlink: (libc)Symbolic Links.
- * readv: (libc)Scatter-Gather.
- * realloc: (libc)Changing Block Size.
- * reallocarray: (libc)Changing Block Size.
- * realpath: (libc)Symbolic Links.
- * recv: (libc)Receiving Data.
- * recvfrom: (libc)Receiving Datagrams.
- * recvmsg: (libc)Other Socket APIs.
- * regcomp: (libc)POSIX Regexp Compilation.
- * regerror: (libc)Regexp Cleanup.
- * regexec: (libc)Matching POSIX Regexps.
- * regfree: (libc)Regexp Cleanup.
- * register_printf_function: (libc)Registering New Conversions.
- * remainder: (libc)Remainder Functions.
- * remainderf: (libc)Remainder Functions.
- * remainderfN: (libc)Remainder Functions.
- * remainderfNx: (libc)Remainder Functions.
- * remainderl: (libc)Remainder Functions.
- * remove: (libc)Deleting Files.
- * rename: (libc)Renaming Files.
- * renameat: (libc)Renaming Files.
- * rewind: (libc)File Positioning.
- * rewinddir: (libc)Random Access Directory.
- * rindex: (libc)Search Functions.
- * rint: (libc)Rounding Functions.
- * rintf: (libc)Rounding Functions.
- * rintfN: (libc)Rounding Functions.
- * rintfNx: (libc)Rounding Functions.
- * rintl: (libc)Rounding Functions.
- * rmdir: (libc)Deleting Files.
- * rootn: (libc)Exponents and Logarithms.
- * rootnf: (libc)Exponents and Logarithms.
- * rootnfN: (libc)Exponents and Logarithms.
- * rootnfNx: (libc)Exponents and Logarithms.
- * rootnl: (libc)Exponents and Logarithms.
- * round: (libc)Rounding Functions.
- * roundeven: (libc)Rounding Functions.
- * roundevenf: (libc)Rounding Functions.
- * roundevenfN: (libc)Rounding Functions.
- * roundevenfNx: (libc)Rounding Functions.
- * roundevenl: (libc)Rounding Functions.
- * roundf: (libc)Rounding Functions.
- * roundfN: (libc)Rounding Functions.
- * roundfNx: (libc)Rounding Functions.
- * roundl: (libc)Rounding Functions.
- * rpmatch: (libc)Yes-or-No Questions.
- * rsqrt: (libc)Exponents and Logarithms.
- * rsqrtf: (libc)Exponents and Logarithms.
- * rsqrtfN: (libc)Exponents and Logarithms.
- * rsqrtfNx: (libc)Exponents and Logarithms.
- * rsqrtl: (libc)Exponents and Logarithms.
- * sbrk: (libc)Resizing the Data Segment.
- * scalb: (libc)Normalization Functions.
- * scalbf: (libc)Normalization Functions.
- * scalbl: (libc)Normalization Functions.
- * scalbln: (libc)Normalization Functions.
- * scalblnf: (libc)Normalization Functions.
- * scalblnfN: (libc)Normalization Functions.
- * scalblnfNx: (libc)Normalization Functions.
- * scalblnl: (libc)Normalization Functions.
- * scalbn: (libc)Normalization Functions.
- * scalbnf: (libc)Normalization Functions.
- * scalbnfN: (libc)Normalization Functions.
- * scalbnfNx: (libc)Normalization Functions.
- * scalbnl: (libc)Normalization Functions.
- * scandir64: (libc)Scanning Directory Content.
- * scandir: (libc)Scanning Directory Content.
- * scanf: (libc)Formatted Input Functions.
- * sched_get_priority_max: (libc)Basic Scheduling Functions.
- * sched_get_priority_min: (libc)Basic Scheduling Functions.
- * sched_getaffinity: (libc)CPU Affinity.
- * sched_getattr: (libc)Extensible Scheduling.
- * sched_getcpu: (libc)CPU Affinity.
- * sched_getparam: (libc)Basic Scheduling Functions.
- * sched_getscheduler: (libc)Basic Scheduling Functions.
- * sched_rr_get_interval: (libc)Basic Scheduling Functions.
- * sched_setaffinity: (libc)CPU Affinity.
- * sched_setattr: (libc)Extensible Scheduling.
- * sched_setparam: (libc)Basic Scheduling Functions.
- * sched_setscheduler: (libc)Basic Scheduling Functions.
- * sched_yield: (libc)Basic Scheduling Functions.
- * secure_getenv: (libc)Environment Access.
- * seed48: (libc)SVID Random.
- * seed48_r: (libc)SVID Random.
- * seekdir: (libc)Random Access Directory.
- * select: (libc)Waiting for I/O.
- * sem_clockwait: (libc)POSIX Semaphores.
- * sem_close: (libc)POSIX Semaphores.
- * sem_destroy: (libc)POSIX Semaphores.
- * sem_getvalue: (libc)POSIX Semaphores.
- * sem_init: (libc)POSIX Semaphores.
- * sem_open: (libc)POSIX Semaphores.
- * sem_post: (libc)POSIX Semaphores.
- * sem_timedwait: (libc)POSIX Semaphores.
- * sem_trywait: (libc)POSIX Semaphores.
- * sem_unlink: (libc)POSIX Semaphores.
- * sem_wait: (libc)POSIX Semaphores.
- * semctl: (libc)Semaphores.
- * semget: (libc)Semaphores.
- * semop: (libc)Semaphores.
- * semtimedop: (libc)Semaphores.
- * send: (libc)Sending Data.
- * sendmsg: (libc)Other Socket APIs.
- * sendto: (libc)Sending Datagrams.
- * setbuf: (libc)Controlling Buffering.
- * setbuffer: (libc)Controlling Buffering.
- * setcontext: (libc)System V contexts.
- * setdomainname: (libc)Host Identification.
- * setegid: (libc)Setting Groups.
- * setenv: (libc)Environment Access.
- * seteuid: (libc)Setting User ID.
- * setfsent: (libc)fstab.
- * setgid: (libc)Setting Groups.
- * setgrent: (libc)Scanning All Groups.
- * setgroups: (libc)Setting Groups.
- * sethostent: (libc)Host Names.
- * sethostid: (libc)Host Identification.
- * sethostname: (libc)Host Identification.
- * setitimer: (libc)Setting an Alarm.
- * setjmp: (libc)Non-Local Details.
- * setlinebuf: (libc)Controlling Buffering.
- * setlocale: (libc)Setting the Locale.
- * setlogmask: (libc)setlogmask.
- * setmntent: (libc)mtab.
- * setnetent: (libc)Networks Database.
- * setnetgrent: (libc)Lookup Netgroup.
- * setpayload: (libc)FP Bit Twiddling.
- * setpayloadf: (libc)FP Bit Twiddling.
- * setpayloadfN: (libc)FP Bit Twiddling.
- * setpayloadfNx: (libc)FP Bit Twiddling.
- * setpayloadl: (libc)FP Bit Twiddling.
- * setpayloadsig: (libc)FP Bit Twiddling.
- * setpayloadsigf: (libc)FP Bit Twiddling.
- * setpayloadsigfN: (libc)FP Bit Twiddling.
- * setpayloadsigfNx: (libc)FP Bit Twiddling.
- * setpayloadsigl: (libc)FP Bit Twiddling.
- * setpgid: (libc)Process Group Functions.
- * setpgrp: (libc)Process Group Functions.
- * setpriority: (libc)Traditional Scheduling Functions.
- * setprotoent: (libc)Protocols Database.
- * setpwent: (libc)Scanning All Users.
- * setregid: (libc)Setting Groups.
- * setreuid: (libc)Setting User ID.
- * setrlimit64: (libc)Limits on Resources.
- * setrlimit: (libc)Limits on Resources.
- * setservent: (libc)Services Database.
- * setsid: (libc)Process Group Functions.
- * setsockopt: (libc)Socket Option Functions.
- * setstate: (libc)BSD Random.
- * setstate_r: (libc)BSD Random.
- * settimeofday: (libc)Setting and Adjusting the Time.
- * setuid: (libc)Setting User ID.
- * setutent: (libc)Manipulating the Database.
- * setutxent: (libc)XPG Functions.
- * setvbuf: (libc)Controlling Buffering.
- * shm_open: (libc)Memory-mapped I/O.
- * shm_unlink: (libc)Memory-mapped I/O.
- * shutdown: (libc)Closing a Socket.
- * sigabbrev_np: (libc)Signal Messages.
- * sigaction: (libc)Advanced Signal Handling.
- * sigaddset: (libc)Signal Sets.
- * sigaltstack: (libc)Signal Stack.
- * sigblock: (libc)BSD Signal Handling.
- * sigdelset: (libc)Signal Sets.
- * sigdescr_np: (libc)Signal Messages.
- * sigemptyset: (libc)Signal Sets.
- * sigfillset: (libc)Signal Sets.
- * siginterrupt: (libc)BSD Signal Handling.
- * sigismember: (libc)Signal Sets.
- * siglongjmp: (libc)Non-Local Exits and Signals.
- * sigmask: (libc)BSD Signal Handling.
- * signal: (libc)Basic Signal Handling.
- * signbit: (libc)FP Bit Twiddling.
- * significand: (libc)Normalization Functions.
- * significandf: (libc)Normalization Functions.
- * significandl: (libc)Normalization Functions.
- * sigpause: (libc)BSD Signal Handling.
- * sigpending: (libc)Checking for Pending Signals.
- * sigprocmask: (libc)Process Signal Mask.
- * sigsetjmp: (libc)Non-Local Exits and Signals.
- * sigsetmask: (libc)BSD Signal Handling.
- * sigstack: (libc)Signal Stack.
- * sigsuspend: (libc)Sigsuspend.
- * sin: (libc)Trig Functions.
- * sincos: (libc)Trig Functions.
- * sincosf: (libc)Trig Functions.
- * sincosfN: (libc)Trig Functions.
- * sincosfNx: (libc)Trig Functions.
- * sincosl: (libc)Trig Functions.
- * sinf: (libc)Trig Functions.
- * sinfN: (libc)Trig Functions.
- * sinfNx: (libc)Trig Functions.
- * sinh: (libc)Hyperbolic Functions.
- * sinhf: (libc)Hyperbolic Functions.
- * sinhfN: (libc)Hyperbolic Functions.
- * sinhfNx: (libc)Hyperbolic Functions.
- * sinhl: (libc)Hyperbolic Functions.
- * sinl: (libc)Trig Functions.
- * sinpi: (libc)Trig Functions.
- * sinpif: (libc)Trig Functions.
- * sinpifN: (libc)Trig Functions.
- * sinpifNx: (libc)Trig Functions.
- * sinpil: (libc)Trig Functions.
- * sleep: (libc)Sleeping.
- * snprintf: (libc)Formatted Output Functions.
- * socket: (libc)Creating a Socket.
- * socketpair: (libc)Socket Pairs.
- * sprintf: (libc)Formatted Output Functions.
- * sqrt: (libc)Exponents and Logarithms.
- * sqrtf: (libc)Exponents and Logarithms.
- * sqrtfN: (libc)Exponents and Logarithms.
- * sqrtfNx: (libc)Exponents and Logarithms.
- * sqrtl: (libc)Exponents and Logarithms.
- * srand48: (libc)SVID Random.
- * srand48_r: (libc)SVID Random.
- * srand: (libc)ISO Random.
- * srandom: (libc)BSD Random.
- * srandom_r: (libc)BSD Random.
- * sscanf: (libc)Formatted Input Functions.
- * ssignal: (libc)Basic Signal Handling.
- * stat64: (libc)Reading Attributes.
- * stat: (libc)Reading Attributes.
- * stdc_bit_ceil_uc: (libc)Bit Manipulation.
- * stdc_bit_ceil_ui: (libc)Bit Manipulation.
- * stdc_bit_ceil_ul: (libc)Bit Manipulation.
- * stdc_bit_ceil_ull: (libc)Bit Manipulation.
- * stdc_bit_ceil_us: (libc)Bit Manipulation.
- * stdc_bit_floor_uc: (libc)Bit Manipulation.
- * stdc_bit_floor_ui: (libc)Bit Manipulation.
- * stdc_bit_floor_ul: (libc)Bit Manipulation.
- * stdc_bit_floor_ull: (libc)Bit Manipulation.
- * stdc_bit_floor_us: (libc)Bit Manipulation.
- * stdc_bit_width_uc: (libc)Bit Manipulation.
- * stdc_bit_width_ui: (libc)Bit Manipulation.
- * stdc_bit_width_ul: (libc)Bit Manipulation.
- * stdc_bit_width_ull: (libc)Bit Manipulation.
- * stdc_bit_width_us: (libc)Bit Manipulation.
- * stdc_count_ones_uc: (libc)Bit Manipulation.
- * stdc_count_ones_ui: (libc)Bit Manipulation.
- * stdc_count_ones_ul: (libc)Bit Manipulation.
- * stdc_count_ones_ull: (libc)Bit Manipulation.
- * stdc_count_ones_us: (libc)Bit Manipulation.
- * stdc_count_zeros_uc: (libc)Bit Manipulation.
- * stdc_count_zeros_ui: (libc)Bit Manipulation.
- * stdc_count_zeros_ul: (libc)Bit Manipulation.
- * stdc_count_zeros_ull: (libc)Bit Manipulation.
- * stdc_count_zeros_us: (libc)Bit Manipulation.
- * stdc_first_leading_one_uc: (libc)Bit Manipulation.
- * stdc_first_leading_one_ui: (libc)Bit Manipulation.
- * stdc_first_leading_one_ul: (libc)Bit Manipulation.
- * stdc_first_leading_one_ull: (libc)Bit Manipulation.
- * stdc_first_leading_one_us: (libc)Bit Manipulation.
- * stdc_first_leading_zero_uc: (libc)Bit Manipulation.
- * stdc_first_leading_zero_ui: (libc)Bit Manipulation.
- * stdc_first_leading_zero_ul: (libc)Bit Manipulation.
- * stdc_first_leading_zero_ull: (libc)Bit Manipulation.
- * stdc_first_leading_zero_us: (libc)Bit Manipulation.
- * stdc_first_trailing_one_uc: (libc)Bit Manipulation.
- * stdc_first_trailing_one_ui: (libc)Bit Manipulation.
- * stdc_first_trailing_one_ul: (libc)Bit Manipulation.
- * stdc_first_trailing_one_ull: (libc)Bit Manipulation.
- * stdc_first_trailing_one_us: (libc)Bit Manipulation.
- * stdc_first_trailing_zero_uc: (libc)Bit Manipulation.
- * stdc_first_trailing_zero_ui: (libc)Bit Manipulation.
- * stdc_first_trailing_zero_ul: (libc)Bit Manipulation.
- * stdc_first_trailing_zero_ull: (libc)Bit Manipulation.
- * stdc_first_trailing_zero_us: (libc)Bit Manipulation.
- * stdc_has_single_bit_uc: (libc)Bit Manipulation.
- * stdc_has_single_bit_ui: (libc)Bit Manipulation.
- * stdc_has_single_bit_ul: (libc)Bit Manipulation.
- * stdc_has_single_bit_ull: (libc)Bit Manipulation.
- * stdc_has_single_bit_us: (libc)Bit Manipulation.
- * stdc_leading_ones_uc: (libc)Bit Manipulation.
- * stdc_leading_ones_ui: (libc)Bit Manipulation.
- * stdc_leading_ones_ul: (libc)Bit Manipulation.
- * stdc_leading_ones_ull: (libc)Bit Manipulation.
- * stdc_leading_ones_us: (libc)Bit Manipulation.
- * stdc_leading_zeros_uc: (libc)Bit Manipulation.
- * stdc_leading_zeros_ui: (libc)Bit Manipulation.
- * stdc_leading_zeros_ul: (libc)Bit Manipulation.
- * stdc_leading_zeros_ull: (libc)Bit Manipulation.
- * stdc_leading_zeros_us: (libc)Bit Manipulation.
- * stdc_trailing_ones_uc: (libc)Bit Manipulation.
- * stdc_trailing_ones_ui: (libc)Bit Manipulation.
- * stdc_trailing_ones_ul: (libc)Bit Manipulation.
- * stdc_trailing_ones_ull: (libc)Bit Manipulation.
- * stdc_trailing_ones_us: (libc)Bit Manipulation.
- * stdc_trailing_zeros_uc: (libc)Bit Manipulation.
- * stdc_trailing_zeros_ui: (libc)Bit Manipulation.
- * stdc_trailing_zeros_ul: (libc)Bit Manipulation.
- * stdc_trailing_zeros_ull: (libc)Bit Manipulation.
- * stdc_trailing_zeros_us: (libc)Bit Manipulation.
- * stime: (libc)Setting and Adjusting the Time.
- * stpcpy: (libc)Copying Strings and Arrays.
- * stpncpy: (libc)Truncating Strings.
- * strcasecmp: (libc)String/Array Comparison.
- * strcasestr: (libc)Search Functions.
- * strcat: (libc)Concatenating Strings.
- * strchr: (libc)Search Functions.
- * strchrnul: (libc)Search Functions.
- * strcmp: (libc)String/Array Comparison.
- * strcoll: (libc)Collation Functions.
- * strcpy: (libc)Copying Strings and Arrays.
- * strcspn: (libc)Search Functions.
- * strdup: (libc)Copying Strings and Arrays.
- * strdupa: (libc)Copying Strings and Arrays.
- * strerror: (libc)Error Messages.
- * strerror_l: (libc)Error Messages.
- * strerror_r: (libc)Error Messages.
- * strerror_r: (libc)Error Messages.
- * strerrordesc_np: (libc)Error Messages.
- * strerrorname_np: (libc)Error Messages.
- * strfmon: (libc)Formatting Numbers.
- * strfromd: (libc)Printing of Floats.
- * strfromf: (libc)Printing of Floats.
- * strfromfN: (libc)Printing of Floats.
- * strfromfNx: (libc)Printing of Floats.
- * strfroml: (libc)Printing of Floats.
- * strfry: (libc)Shuffling Bytes.
- * strftime: (libc)Formatting Calendar Time.
- * strftime_l: (libc)Formatting Calendar Time.
- * strlcat: (libc)Truncating Strings.
- * strlcpy: (libc)Truncating Strings.
- * strlen: (libc)String Length.
- * strncasecmp: (libc)String/Array Comparison.
- * strncat: (libc)Truncating Strings.
- * strncmp: (libc)String/Array Comparison.
- * strncpy: (libc)Truncating Strings.
- * strndup: (libc)Truncating Strings.
- * strndupa: (libc)Truncating Strings.
- * strnlen: (libc)String Length.
- * strpbrk: (libc)Search Functions.
- * strptime: (libc)Low-Level Time String Parsing.
- * strrchr: (libc)Search Functions.
- * strsep: (libc)Finding Tokens in a String.
- * strsignal: (libc)Signal Messages.
- * strspn: (libc)Search Functions.
- * strstr: (libc)Search Functions.
- * strtod: (libc)Parsing of Floats.
- * strtof: (libc)Parsing of Floats.
- * strtofN: (libc)Parsing of Floats.
- * strtofNx: (libc)Parsing of Floats.
- * strtoimax: (libc)Parsing of Integers.
- * strtok: (libc)Finding Tokens in a String.
- * strtok_r: (libc)Finding Tokens in a String.
- * strtol: (libc)Parsing of Integers.
- * strtold: (libc)Parsing of Floats.
- * strtoll: (libc)Parsing of Integers.
- * strtoq: (libc)Parsing of Integers.
- * strtoul: (libc)Parsing of Integers.
- * strtoull: (libc)Parsing of Integers.
- * strtoumax: (libc)Parsing of Integers.
- * strtouq: (libc)Parsing of Integers.
- * strverscmp: (libc)String/Array Comparison.
- * strxfrm: (libc)Collation Functions.
- * stty: (libc)BSD Terminal Modes.
- * swapcontext: (libc)System V contexts.
- * swprintf: (libc)Formatted Output Functions.
- * swscanf: (libc)Formatted Input Functions.
- * symlink: (libc)Symbolic Links.
- * sync: (libc)Synchronizing I/O.
- * syscall: (libc)System Calls.
- * sysconf: (libc)Sysconf Definition.
- * syslog: (libc)syslog; vsyslog.
- * system: (libc)Running a Command.
- * sysv_signal: (libc)Basic Signal Handling.
- * tan: (libc)Trig Functions.
- * tanf: (libc)Trig Functions.
- * tanfN: (libc)Trig Functions.
- * tanfNx: (libc)Trig Functions.
- * tanh: (libc)Hyperbolic Functions.
- * tanhf: (libc)Hyperbolic Functions.
- * tanhfN: (libc)Hyperbolic Functions.
- * tanhfNx: (libc)Hyperbolic Functions.
- * tanhl: (libc)Hyperbolic Functions.
- * tanl: (libc)Trig Functions.
- * tanpi: (libc)Trig Functions.
- * tanpif: (libc)Trig Functions.
- * tanpifN: (libc)Trig Functions.
- * tanpifNx: (libc)Trig Functions.
- * tanpil: (libc)Trig Functions.
- * tcdrain: (libc)Line Control.
- * tcflow: (libc)Line Control.
- * tcflush: (libc)Line Control.
- * tcgetattr: (libc)Mode Functions.
- * tcgetpgrp: (libc)Terminal Access Functions.
- * tcgetsid: (libc)Terminal Access Functions.
- * tcsendbreak: (libc)Line Control.
- * tcsetattr: (libc)Mode Functions.
- * tcsetpgrp: (libc)Terminal Access Functions.
- * tdelete: (libc)Tree Search Function.
- * tdestroy: (libc)Tree Search Function.
- * telldir: (libc)Random Access Directory.
- * tempnam: (libc)Temporary Files.
- * textdomain: (libc)Locating gettext catalog.
- * tfind: (libc)Tree Search Function.
- * tgamma: (libc)Special Functions.
- * tgammaf: (libc)Special Functions.
- * tgammafN: (libc)Special Functions.
- * tgammafNx: (libc)Special Functions.
- * tgammal: (libc)Special Functions.
- * tgkill: (libc)Signaling Another Process.
- * thrd_create: (libc)ISO C Thread Management.
- * thrd_current: (libc)ISO C Thread Management.
- * thrd_detach: (libc)ISO C Thread Management.
- * thrd_equal: (libc)ISO C Thread Management.
- * thrd_exit: (libc)ISO C Thread Management.
- * thrd_join: (libc)ISO C Thread Management.
- * thrd_sleep: (libc)ISO C Thread Management.
- * thrd_yield: (libc)ISO C Thread Management.
- * time: (libc)Getting the Time.
- * timegm: (libc)Broken-down Time.
- * timelocal: (libc)Broken-down Time.
- * times: (libc)Processor Time.
- * timespec_get: (libc)Getting the Time.
- * timespec_getres: (libc)Getting the Time.
- * tmpfile64: (libc)Temporary Files.
- * tmpfile: (libc)Temporary Files.
- * tmpnam: (libc)Temporary Files.
- * tmpnam_r: (libc)Temporary Files.
- * toascii: (libc)Case Conversion.
- * tolower: (libc)Case Conversion.
- * totalorder: (libc)FP Comparison Functions.
- * totalorderf: (libc)FP Comparison Functions.
- * totalorderfN: (libc)FP Comparison Functions.
- * totalorderfNx: (libc)FP Comparison Functions.
- * totalorderl: (libc)FP Comparison Functions.
- * totalordermag: (libc)FP Comparison Functions.
- * totalordermagf: (libc)FP Comparison Functions.
- * totalordermagfN: (libc)FP Comparison Functions.
- * totalordermagfNx: (libc)FP Comparison Functions.
- * totalordermagl: (libc)FP Comparison Functions.
- * toupper: (libc)Case Conversion.
- * towctrans: (libc)Wide Character Case Conversion.
- * towlower: (libc)Wide Character Case Conversion.
- * towupper: (libc)Wide Character Case Conversion.
- * trunc: (libc)Rounding Functions.
- * truncate64: (libc)File Size.
- * truncate: (libc)File Size.
- * truncf: (libc)Rounding Functions.
- * truncfN: (libc)Rounding Functions.
- * truncfNx: (libc)Rounding Functions.
- * truncl: (libc)Rounding Functions.
- * tsearch: (libc)Tree Search Function.
- * tss_create: (libc)ISO C Thread-local Storage.
- * tss_delete: (libc)ISO C Thread-local Storage.
- * tss_get: (libc)ISO C Thread-local Storage.
- * tss_set: (libc)ISO C Thread-local Storage.
- * ttyname: (libc)Is It a Terminal.
- * ttyname_r: (libc)Is It a Terminal.
- * twalk: (libc)Tree Search Function.
- * twalk_r: (libc)Tree Search Function.
- * tzset: (libc)Time Zone State.
- * uabs: (libc)Absolute Value.
- * ufromfp: (libc)Rounding Functions.
- * ufromfpf: (libc)Rounding Functions.
- * ufromfpfN: (libc)Rounding Functions.
- * ufromfpfNx: (libc)Rounding Functions.
- * ufromfpl: (libc)Rounding Functions.
- * ufromfpx: (libc)Rounding Functions.
- * ufromfpxf: (libc)Rounding Functions.
- * ufromfpxfN: (libc)Rounding Functions.
- * ufromfpxfNx: (libc)Rounding Functions.
- * ufromfpxl: (libc)Rounding Functions.
- * ulabs: (libc)Absolute Value.
- * ulimit: (libc)Limits on Resources.
- * ullabs: (libc)Absolute Value.
- * umask: (libc)Setting Permissions.
- * umaxabs: (libc)Absolute Value.
- * umount2: (libc)Mount-Unmount-Remount.
- * umount: (libc)Mount-Unmount-Remount.
- * uname: (libc)Platform Type.
- * ungetc: (libc)How Unread.
- * ungetwc: (libc)How Unread.
- * unlink: (libc)Deleting Files.
- * unlinkat: (libc)Deleting Files.
- * unlockpt: (libc)Allocation.
- * unsetenv: (libc)Environment Access.
- * updwtmp: (libc)Manipulating the Database.
- * utime: (libc)File Times.
- * utimensat: (libc)File Times.
- * utimes: (libc)File Times.
- * utmpname: (libc)Manipulating the Database.
- * utmpxname: (libc)XPG Functions.
- * va_arg: (libc)Argument Macros.
- * va_copy: (libc)Argument Macros.
- * va_end: (libc)Argument Macros.
- * va_start: (libc)Argument Macros.
- * valloc: (libc)Aligned Memory Blocks.
- * vasprintf: (libc)Variable Arguments Output.
- * vdprintf: (libc)Variable Arguments Output.
- * verr: (libc)Error Messages.
- * verrx: (libc)Error Messages.
- * versionsort64: (libc)Scanning Directory Content.
- * versionsort: (libc)Scanning Directory Content.
- * vfork: (libc)Creating a Process.
- * vfprintf: (libc)Variable Arguments Output.
- * vfscanf: (libc)Variable Arguments Input.
- * vfwprintf: (libc)Variable Arguments Output.
- * vfwscanf: (libc)Variable Arguments Input.
- * vlimit: (libc)Limits on Resources.
- * vprintf: (libc)Variable Arguments Output.
- * vscanf: (libc)Variable Arguments Input.
- * vsnprintf: (libc)Variable Arguments Output.
- * vsprintf: (libc)Variable Arguments Output.
- * vsscanf: (libc)Variable Arguments Input.
- * vswprintf: (libc)Variable Arguments Output.
- * vswscanf: (libc)Variable Arguments Input.
- * vsyslog: (libc)syslog; vsyslog.
- * vwarn: (libc)Error Messages.
- * vwarnx: (libc)Error Messages.
- * vwprintf: (libc)Variable Arguments Output.
- * vwscanf: (libc)Variable Arguments Input.
- * wait3: (libc)BSD Wait Functions.
- * wait4: (libc)Process Completion.
- * wait: (libc)Process Completion.
- * waitpid: (libc)Process Completion.
- * warn: (libc)Error Messages.
- * warnx: (libc)Error Messages.
- * wcpcpy: (libc)Copying Strings and Arrays.
- * wcpncpy: (libc)Truncating Strings.
- * wcrtomb: (libc)Converting a Character.
- * wcscasecmp: (libc)String/Array Comparison.
- * wcscat: (libc)Concatenating Strings.
- * wcschr: (libc)Search Functions.
- * wcschrnul: (libc)Search Functions.
- * wcscmp: (libc)String/Array Comparison.
- * wcscoll: (libc)Collation Functions.
- * wcscpy: (libc)Copying Strings and Arrays.
- * wcscspn: (libc)Search Functions.
- * wcsdup: (libc)Copying Strings and Arrays.
- * wcsftime: (libc)Formatting Calendar Time.
- * wcslcat: (libc)Truncating Strings.
- * wcslcpy: (libc)Truncating Strings.
- * wcslen: (libc)String Length.
- * wcsncasecmp: (libc)String/Array Comparison.
- * wcsncat: (libc)Truncating Strings.
- * wcsncmp: (libc)String/Array Comparison.
- * wcsncpy: (libc)Truncating Strings.
- * wcsnlen: (libc)String Length.
- * wcsnrtombs: (libc)Converting Strings.
- * wcspbrk: (libc)Search Functions.
- * wcsrchr: (libc)Search Functions.
- * wcsrtombs: (libc)Converting Strings.
- * wcsspn: (libc)Search Functions.
- * wcsstr: (libc)Search Functions.
- * wcstod: (libc)Parsing of Floats.
- * wcstof: (libc)Parsing of Floats.
- * wcstofN: (libc)Parsing of Floats.
- * wcstofNx: (libc)Parsing of Floats.
- * wcstoimax: (libc)Parsing of Integers.
- * wcstok: (libc)Finding Tokens in a String.
- * wcstol: (libc)Parsing of Integers.
- * wcstold: (libc)Parsing of Floats.
- * wcstoll: (libc)Parsing of Integers.
- * wcstombs: (libc)Non-reentrant String Conversion.
- * wcstoq: (libc)Parsing of Integers.
- * wcstoul: (libc)Parsing of Integers.
- * wcstoull: (libc)Parsing of Integers.
- * wcstoumax: (libc)Parsing of Integers.
- * wcstouq: (libc)Parsing of Integers.
- * wcswcs: (libc)Search Functions.
- * wcsxfrm: (libc)Collation Functions.
- * wctob: (libc)Converting a Character.
- * wctomb: (libc)Non-reentrant Character Conversion.
- * wctrans: (libc)Wide Character Case Conversion.
- * wctype: (libc)Classification of Wide Characters.
- * wmemchr: (libc)Search Functions.
- * wmemcmp: (libc)String/Array Comparison.
- * wmemcpy: (libc)Copying Strings and Arrays.
- * wmemmove: (libc)Copying Strings and Arrays.
- * wmempcpy: (libc)Copying Strings and Arrays.
- * wmemset: (libc)Copying Strings and Arrays.
- * wordexp: (libc)Calling Wordexp.
- * wordfree: (libc)Calling Wordexp.
- * wprintf: (libc)Formatted Output Functions.
- * write: (libc)I/O Primitives.
- * writev: (libc)Scatter-Gather.
- * wscanf: (libc)Formatted Input Functions.
- * y0: (libc)Special Functions.
- * y0f: (libc)Special Functions.
- * y0fN: (libc)Special Functions.
- * y0fNx: (libc)Special Functions.
- * y0l: (libc)Special Functions.
- * y1: (libc)Special Functions.
- * y1f: (libc)Special Functions.
- * y1fN: (libc)Special Functions.
- * y1fNx: (libc)Special Functions.
- * y1l: (libc)Special Functions.
- * yn: (libc)Special Functions.
- * ynf: (libc)Special Functions.
- * ynfN: (libc)Special Functions.
- * ynfNx: (libc)Special Functions.
- * ynl: (libc)Special Functions.
- END-INFO-DIR-ENTRY
- File: libc.info, Node: Dynamic String Input, Next: Other Input Conversions, Prev: String Input Conversions, Up: Formatted Input
- 12.14.6 Dynamically Allocating String Conversions
- -------------------------------------------------
- A GNU extension to formatted input lets you safely read a string with no
- maximum size. Using this feature, you don't supply a buffer; instead,
- ‘scanf’ allocates a buffer big enough to hold the data and gives you its
- address. To use this feature, write ‘a’ as a flag character, as in
- ‘%as’ or ‘%a[0-9a-z]’.
- The pointer argument you supply for where to store the input should
- have type ‘char **’. The ‘scanf’ function allocates a buffer and stores
- its address in the word that the argument points to. You should free
- the buffer with ‘free’ when you no longer need it.
- Here is an example of using the ‘a’ flag with the ‘%[...]’ conversion
- specification to read a "variable assignment" of the form ‘VARIABLE =
- VALUE’.
- {
- char *variable, *value;
- if (2 > scanf ("%a[a-zA-Z0-9] = %a[^\n]\n",
- &variable, &value))
- {
- invalid_input_error ();
- return 0;
- }
- ...
- }
- File: libc.info, Node: Other Input Conversions, Next: Formatted Input Functions, Prev: Dynamic String Input, Up: Formatted Input
- 12.14.7 Other Input Conversions
- -------------------------------
- This section describes the miscellaneous input conversions.
- The ‘%p’ conversion is used to read a pointer value. It recognizes
- the same syntax used by the ‘%p’ output conversion for ‘printf’ (*note
- Other Output Conversions::); that is, a hexadecimal number just as the
- ‘%x’ conversion accepts. The corresponding argument should be of type
- ‘void **’; that is, the address of a place to store a pointer.
- The resulting pointer value is not guaranteed to be valid if it was
- not originally written during the same program execution that reads it
- in.
- The ‘%n’ conversion produces the number of characters read so far by
- this call. The corresponding argument should be of type ‘int *’, unless
- a type modifier is in effect (*note Numeric Input Conversions::). This
- conversion works in the same way as the ‘%n’ conversion for ‘printf’;
- see *note Other Output Conversions::, for an example.
- The ‘%n’ conversion is the only mechanism for determining the success
- of literal matches or conversions with suppressed assignments. If the
- ‘%n’ follows the locus of a matching failure, then no value is stored
- for it since ‘scanf’ returns before processing the ‘%n’. If you store
- ‘-1’ in that argument slot before calling ‘scanf’, the presence of ‘-1’
- after ‘scanf’ indicates an error occurred before the ‘%n’ was reached.
- Finally, the ‘%%’ conversion matches a literal ‘%’ character in the
- input stream, without using an argument. This conversion does not
- permit any flags, field width, or type modifier to be specified.
- File: libc.info, Node: Formatted Input Functions, Next: Variable Arguments Input, Prev: Other Input Conversions, Up: Formatted Input
- 12.14.8 Formatted Input Functions
- ---------------------------------
- Here are the descriptions of the functions for performing formatted
- input. Prototypes for these functions are in the header file ‘stdio.h’.
- -- Function: int scanf (const char *TEMPLATE, ...)
- Preliminary: | MT-Safe locale | AS-Unsafe corrupt heap | AC-Unsafe
- mem lock corrupt | *Note POSIX Safety Concepts::.
- The ‘scanf’ function reads formatted input from the stream ‘stdin’
- under the control of the template string TEMPLATE. The optional
- arguments are pointers to the places which receive the resulting
- values.
- The return value is normally the number of successful assignments.
- If an end-of-file condition is detected before any matches are
- performed, including matches against whitespace and literal
- characters in the template, then ‘EOF’ is returned.
- -- Function: int wscanf (const wchar_t *TEMPLATE, ...)
- Preliminary: | MT-Safe locale | AS-Unsafe corrupt heap | AC-Unsafe
- mem lock corrupt | *Note POSIX Safety Concepts::.
- The ‘wscanf’ function reads formatted input from the stream ‘stdin’
- under the control of the template string TEMPLATE. The optional
- arguments are pointers to the places which receive the resulting
- values.
- The return value is normally the number of successful assignments.
- If an end-of-file condition is detected before any matches are
- performed, including matches against whitespace and literal
- characters in the template, then ‘WEOF’ is returned.
- -- Function: int fscanf (FILE *STREAM, const char *TEMPLATE, ...)
- Preliminary: | MT-Safe locale | AS-Unsafe corrupt heap | AC-Unsafe
- mem lock corrupt | *Note POSIX Safety Concepts::.
- This function is just like ‘scanf’, except that the input is read
- from the stream STREAM instead of ‘stdin’.
- -- Function: int fwscanf (FILE *STREAM, const wchar_t *TEMPLATE, ...)
- Preliminary: | MT-Safe locale | AS-Unsafe corrupt heap | AC-Unsafe
- mem lock corrupt | *Note POSIX Safety Concepts::.
- This function is just like ‘wscanf’, except that the input is read
- from the stream STREAM instead of ‘stdin’.
- -- Function: int sscanf (const char *S, const char *TEMPLATE, ...)
- Preliminary: | MT-Safe locale | AS-Unsafe heap | AC-Unsafe mem |
- *Note POSIX Safety Concepts::.
- This is like ‘scanf’, except that the characters are taken from the
- null-terminated string S instead of from a stream. Reaching the
- end of the string is treated as an end-of-file condition.
- The behavior of this function is undefined if copying takes place
- between objects that overlap--for example, if S is also given as an
- argument to receive a string read under control of the ‘%s’, ‘%S’,
- or ‘%[’ conversion.
- -- Function: int swscanf (const wchar_t *WS, const wchar_t *TEMPLATE,
- ...)
- Preliminary: | MT-Safe locale | AS-Unsafe heap | AC-Unsafe mem |
- *Note POSIX Safety Concepts::.
- This is like ‘wscanf’, except that the characters are taken from
- the null-terminated string WS instead of from a stream. Reaching
- the end of the string is treated as an end-of-file condition.
- The behavior of this function is undefined if copying takes place
- between objects that overlap--for example, if WS is also given as
- an argument to receive a string read under control of the ‘%s’,
- ‘%S’, or ‘%[’ conversion.
- File: libc.info, Node: Variable Arguments Input, Prev: Formatted Input Functions, Up: Formatted Input
- 12.14.9 Variable Arguments Input Functions
- ------------------------------------------
- The functions ‘vscanf’ and friends are provided so that you can define
- your own variadic ‘scanf’-like functions that make use of the same
- internals as the built-in formatted output functions. These functions
- are analogous to the ‘vprintf’ series of output functions. *Note
- Variable Arguments Output::, for important information on how to use
- them.
- *Portability Note:* The functions listed in this section were
- introduced in ISO C99 and were before available as GNU extensions.
- -- Function: int vscanf (const char *TEMPLATE, va_list AP)
- Preliminary: | MT-Safe locale | AS-Unsafe corrupt heap | AC-Unsafe
- mem lock corrupt | *Note POSIX Safety Concepts::.
- This function is similar to ‘scanf’, but instead of taking a
- variable number of arguments directly, it takes an argument list
- pointer AP of type ‘va_list’ (*note Variadic Functions::).
- -- Function: int vwscanf (const wchar_t *TEMPLATE, va_list AP)
- Preliminary: | MT-Safe locale | AS-Unsafe corrupt heap | AC-Unsafe
- mem lock corrupt | *Note POSIX Safety Concepts::.
- This function is similar to ‘wscanf’, but instead of taking a
- variable number of arguments directly, it takes an argument list
- pointer AP of type ‘va_list’ (*note Variadic Functions::).
- -- Function: int vfscanf (FILE *STREAM, const char *TEMPLATE, va_list
- AP)
- Preliminary: | MT-Safe locale | AS-Unsafe corrupt heap | AC-Unsafe
- mem lock corrupt | *Note POSIX Safety Concepts::.
- This is the equivalent of ‘fscanf’ with the variable argument list
- specified directly as for ‘vscanf’.
- -- Function: int vfwscanf (FILE *STREAM, const wchar_t *TEMPLATE,
- va_list AP)
- Preliminary: | MT-Safe locale | AS-Unsafe corrupt heap | AC-Unsafe
- mem lock corrupt | *Note POSIX Safety Concepts::.
- This is the equivalent of ‘fwscanf’ with the variable argument list
- specified directly as for ‘vwscanf’.
- -- Function: int vsscanf (const char *S, const char *TEMPLATE, va_list
- AP)
- Preliminary: | MT-Safe locale | AS-Unsafe heap | AC-Unsafe mem |
- *Note POSIX Safety Concepts::.
- This is the equivalent of ‘sscanf’ with the variable argument list
- specified directly as for ‘vscanf’.
- -- Function: int vswscanf (const wchar_t *S, const wchar_t *TEMPLATE,
- va_list AP)
- Preliminary: | MT-Safe locale | AS-Unsafe heap | AC-Unsafe mem |
- *Note POSIX Safety Concepts::.
- This is the equivalent of ‘swscanf’ with the variable argument list
- specified directly as for ‘vwscanf’.
- In GNU C, there is a special construct you can use to let the
- compiler know that a function uses a ‘scanf’-style format string. Then
- it can check the number and types of arguments in each call to the
- function, and warn you when they do not match the format string. For
- details, see *note Declaring Attributes of Functions: (gcc)Function
- Attributes.
- File: libc.info, Node: EOF and Errors, Next: Error Recovery, Prev: Formatted Input, Up: I/O on Streams
- 12.15 End-Of-File and Errors
- ============================
- Many of the functions described in this chapter return the value of the
- macro ‘EOF’ to indicate unsuccessful completion of the operation. Since
- ‘EOF’ is used to report both end of file and random errors, it's often
- better to use the ‘feof’ function to check explicitly for end of file
- and ‘ferror’ to check for errors. These functions check indicators that
- are part of the internal state of the stream object, indicators set if
- the appropriate condition was detected by a previous I/O operation on
- that stream.
- The end of file and error conditions are mutually exclusive. For a
- narrow oriented stream, end of file is not considered an error. For
- wide oriented streams, reaching the end of the underlying file can
- result an error if the underlying file ends with an incomplete multibyte
- sequence. This is reported as an error by ‘ferror’, and not as an end
- of file by ‘feof’. End of file on wide oriented streams that does not
- fall into the middle of a multibyte sequence is reported via ‘feof’.
- -- Macro: int EOF
- This macro is an integer value that is returned by a number of
- narrow stream functions to indicate an end-of-file condition, or
- some other error situation. With the GNU C Library, ‘EOF’ is ‘-1’.
- In other libraries, its value may be some other negative number.
- This symbol is declared in ‘stdio.h’.
- -- Macro: int WEOF
- This macro is an integer value that is returned by a number of wide
- stream functions to indicate an end-of-file condition, or some
- other error situation. With the GNU C Library, ‘WEOF’ is ‘-1’. In
- other libraries, its value may be some other negative number.
- This symbol is declared in ‘wchar.h’.
- -- Function: int feof (FILE *STREAM)
- Preliminary: | MT-Safe | AS-Safe | AC-Unsafe lock | *Note POSIX
- Safety Concepts::.
- The ‘feof’ function returns nonzero if and only if the end-of-file
- indicator for the stream STREAM is set.
- This symbol is declared in ‘stdio.h’.
- -- Function: int feof_unlocked (FILE *STREAM)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- The ‘feof_unlocked’ function is equivalent to the ‘feof’ function
- except that it does not implicitly lock the stream.
- This function is a GNU extension.
- This symbol is declared in ‘stdio.h’.
- -- Function: int ferror (FILE *STREAM)
- Preliminary: | MT-Safe | AS-Safe | AC-Unsafe lock | *Note POSIX
- Safety Concepts::.
- The ‘ferror’ function returns nonzero if and only if the error
- indicator for the stream STREAM is set, indicating that an error
- has occurred on a previous operation on the stream.
- This symbol is declared in ‘stdio.h’.
- -- Function: int ferror_unlocked (FILE *STREAM)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- The ‘ferror_unlocked’ function is equivalent to the ‘ferror’
- function except that it does not implicitly lock the stream.
- This function is a GNU extension.
- This symbol is declared in ‘stdio.h’.
- In addition to setting the error indicator associated with the
- stream, the functions that operate on streams also set ‘errno’ in the
- same way as the corresponding low-level functions that operate on file
- descriptors. For example, all of the functions that perform output to a
- stream--such as ‘fputc’, ‘printf’, and ‘fflush’--are implemented in
- terms of ‘write’, and all of the ‘errno’ error conditions defined for
- ‘write’ are meaningful for these functions. For more information about
- the descriptor-level I/O functions, see *note Low-Level I/O::.
- File: libc.info, Node: Error Recovery, Next: Binary Streams, Prev: EOF and Errors, Up: I/O on Streams
- 12.16 Recovering from errors
- ============================
- You may explicitly clear the error and EOF flags with the ‘clearerr’
- function.
- -- Function: void clearerr (FILE *STREAM)
- Preliminary: | MT-Safe | AS-Safe | AC-Unsafe lock | *Note POSIX
- Safety Concepts::.
- This function clears the end-of-file and error indicators for the
- stream STREAM.
- The file positioning functions (*note File Positioning::) also
- clear the end-of-file indicator for the stream.
- -- Function: void clearerr_unlocked (FILE *STREAM)
- Preliminary: | MT-Safe race:stream | AS-Safe | AC-Safe | *Note
- POSIX Safety Concepts::.
- The ‘clearerr_unlocked’ function is equivalent to the ‘clearerr’
- function except that it does not implicitly lock the stream.
- This function is a GNU extension.
- Note that it is _not_ correct to just clear the error flag and retry
- a failed stream operation. After a failed write, any number of
- characters since the last buffer flush may have been committed to the
- file, while some buffered data may have been discarded. Merely retrying
- can thus cause lost or repeated data.
- A failed read may leave the file pointer in an inappropriate position
- for a second try. In both cases, you should seek to a known position
- before retrying.
- Most errors that can happen are not recoverable -- a second try will
- always fail again in the same way. So usually it is best to give up and
- report the error to the user, rather than install complicated recovery
- logic.
- One important exception is ‘EINTR’ (*note Interrupted Primitives::).
- Many stream I/O implementations will treat it as an ordinary error,
- which can be quite inconvenient. You can avoid this hassle by
- installing all signals with the ‘SA_RESTART’ flag.
- For similar reasons, setting nonblocking I/O on a stream's file
- descriptor is not usually advisable.
- File: libc.info, Node: Binary Streams, Next: File Positioning, Prev: Error Recovery, Up: I/O on Streams
- 12.17 Text and Binary Streams
- =============================
- GNU systems and other POSIX-compatible operating systems organize all
- files as uniform sequences of characters. However, some other systems
- make a distinction between files containing text and files containing
- binary data, and the input and output facilities of ISO C provide for
- this distinction. This section tells you how to write programs portable
- to such systems.
- When you open a stream, you can specify either a “text stream” or a
- “binary stream”. You indicate that you want a binary stream by
- specifying the ‘b’ modifier in the OPENTYPE argument to ‘fopen’; see
- *note Opening Streams::. Without this option, ‘fopen’ opens the file as
- a text stream.
- Text and binary streams differ in several ways:
- • The data read from a text stream is divided into “lines” which are
- terminated by newline (‘'\n'’) characters, while a binary stream is
- simply a long series of characters. A text stream might on some
- systems fail to handle lines more than 254 characters long
- (including the terminating newline character).
- • If the system does not use POSIX-style in-band signalling to
- indicate line termination, it can be impossibe to write anything to
- a text stream without adding a line terminator. As a result,
- flushing a text stream (by calling ‘fflush’, for example) may
- produce a logical line terminator even if no ‘'\n'’ character was
- written by the program.
- • Text files may contain lines that embed ‘'\n'’ characters that are
- not treated as line terminators by the system. C programs cannot
- read such text files reliably using the ‘stdio.h’ facilities.
- • On some systems, text files can contain only printing characters,
- horizontal tab characters, and newlines, and so text streams may
- not support other characters. However, binary streams can handle
- any character value.
- • Space characters that are written immediately preceding a newline
- character in a text stream may disappear when the file is read in
- again.
- • More generally, there need not be a one-to-one mapping between
- characters that are read from or written to a text stream, and the
- characters in the actual file.
- Since a binary stream is always more capable and more predictable
- than a text stream, you might wonder what purpose text streams serve.
- Why not simply always use binary streams? The answer is that on these
- operating systems, text and binary streams use different file formats,
- and the only way to read or write "an ordinary file of text" that can
- work with other text-oriented programs is through a text stream.
- In the GNU C Library, and on all POSIX systems, there is no
- difference between text streams and binary streams. When you open a
- stream, you get the same kind of stream regardless of whether you ask
- for binary. This stream can handle any file content, and has none of
- the restrictions that text streams sometimes have.
- File: libc.info, Node: File Positioning, Next: Portable Positioning, Prev: Binary Streams, Up: I/O on Streams
- 12.18 File Positioning
- ======================
- The “file position” of a stream describes where in the file the stream
- is currently reading or writing. I/O on the stream advances the file
- position through the file. On GNU systems, the file position is
- represented as an integer, which counts the number of bytes from the
- beginning of the file. *Note File Position::.
- During I/O to an ordinary disk file, you can change the file position
- whenever you wish, so as to read or write any portion of the file. Some
- other kinds of files may also permit this. Files which support changing
- the file position are sometimes referred to as “random-access” files.
- You can use the functions in this section to examine or modify the
- file position indicator associated with a stream. The symbols listed
- below are declared in the header file ‘stdio.h’.
- -- Function: long int ftell (FILE *STREAM)
- Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
- | *Note POSIX Safety Concepts::.
- This function returns the current file position of the stream
- STREAM.
- This function can fail if the stream doesn't support file
- positioning, or if the file position can't be represented in a
- ‘long int’, and possibly for other reasons as well. If a failure
- occurs, a value of ‘-1’ is returned.
- -- Function: off_t ftello (FILE *STREAM)
- Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
- | *Note POSIX Safety Concepts::.
- The ‘ftello’ function is similar to ‘ftell’, except that it returns
- a value of type ‘off_t’. Systems which support this type use it to
- describe all file positions, unlike the POSIX specification which
- uses a long int. The two are not necessarily the same size.
- Therefore, using ftell can lead to problems if the implementation
- is written on top of a POSIX compliant low-level I/O
- implementation, and using ‘ftello’ is preferable whenever it is
- available.
- If this function fails it returns ‘(off_t) -1’. This can happen
- due to missing support for file positioning or internal errors.
- Otherwise the return value is the current file position.
- The function is an extension defined in the Unix Single
- Specification version 2.
- When the sources are compiled with ‘_FILE_OFFSET_BITS == 64’ on a
- 32 bit system this function is in fact ‘ftello64’. I.e., the LFS
- interface transparently replaces the old interface.
- -- Function: off64_t ftello64 (FILE *STREAM)
- Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
- | *Note POSIX Safety Concepts::.
- This function is similar to ‘ftello’ with the only difference that
- the return value is of type ‘off64_t’. This also requires that the
- stream STREAM was opened using either ‘fopen64’, ‘freopen64’, or
- ‘tmpfile64’ since otherwise the underlying file operations to
- position the file pointer beyond the 2^31 bytes limit might fail.
- If the sources are compiled with ‘_FILE_OFFSET_BITS == 64’ on a 32
- bits machine this function is available under the name ‘ftello’ and
- so transparently replaces the old interface.
- -- Function: int fseek (FILE *STREAM, long int OFFSET, int WHENCE)
- Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
- | *Note POSIX Safety Concepts::.
- The ‘fseek’ function is used to change the file position of the
- stream STREAM. The value of WHENCE must be one of the constants
- ‘SEEK_SET’, ‘SEEK_CUR’, or ‘SEEK_END’, to indicate whether the
- OFFSET is relative to the beginning of the file, the current file
- position, or the end of the file, respectively.
- This function returns a value of zero if the operation was
- successful, and a nonzero value to indicate failure. A successful
- call also clears the end-of-file indicator of STREAM and discards
- any characters that were "pushed back" by the use of ‘ungetc’.
- ‘fseek’ either flushes any buffered output before setting the file
- position or else remembers it so it will be written later in its
- proper place in the file.
- -- Function: int fseeko (FILE *STREAM, off_t OFFSET, int WHENCE)
- Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
- | *Note POSIX Safety Concepts::.
- This function is similar to ‘fseek’ but it corrects a problem with
- ‘fseek’ in a system with POSIX types. Using a value of type ‘long
- int’ for the offset is not compatible with POSIX. ‘fseeko’ uses the
- correct type ‘off_t’ for the OFFSET parameter.
- For this reason it is a good idea to prefer ‘ftello’ whenever it is
- available since its functionality is (if different at all) closer
- the underlying definition.
- The functionality and return value are the same as for ‘fseek’.
- The function is an extension defined in the Unix Single
- Specification version 2.
- When the sources are compiled with ‘_FILE_OFFSET_BITS == 64’ on a
- 32 bit system this function is in fact ‘fseeko64’. I.e., the LFS
- interface transparently replaces the old interface.
- -- Function: int fseeko64 (FILE *STREAM, off64_t OFFSET, int WHENCE)
- Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
- | *Note POSIX Safety Concepts::.
- This function is similar to ‘fseeko’ with the only difference that
- the OFFSET parameter is of type ‘off64_t’. This also requires that
- the stream STREAM was opened using either ‘fopen64’, ‘freopen64’,
- or ‘tmpfile64’ since otherwise the underlying file operations to
- position the file pointer beyond the 2^31 bytes limit might fail.
- If the sources are compiled with ‘_FILE_OFFSET_BITS == 64’ on a 32
- bits machine this function is available under the name ‘fseeko’ and
- so transparently replaces the old interface.
- *Portability Note:* In non-POSIX systems, ‘ftell’, ‘ftello’, ‘fseek’
- and ‘fseeko’ might work reliably only on binary streams. *Note Binary
- Streams::.
- The following symbolic constants are defined for use as the WHENCE
- argument to ‘fseek’. They are also used with the ‘lseek’ function
- (*note I/O Primitives::) and to specify offsets for file locks (*note
- Control Operations::).
- -- Macro: int SEEK_SET
- This is an integer constant which, when used as the WHENCE argument
- to the ‘fseek’ or ‘fseeko’ functions, specifies that the offset
- provided is relative to the beginning of the file.
- -- Macro: int SEEK_CUR
- This is an integer constant which, when used as the WHENCE argument
- to the ‘fseek’ or ‘fseeko’ functions, specifies that the offset
- provided is relative to the current file position.
- -- Macro: int SEEK_END
- This is an integer constant which, when used as the WHENCE argument
- to the ‘fseek’ or ‘fseeko’ functions, specifies that the offset
- provided is relative to the end of the file.
- -- Function: void rewind (FILE *STREAM)
- Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
- | *Note POSIX Safety Concepts::.
- The ‘rewind’ function positions the stream STREAM at the beginning
- of the file. It is equivalent to calling ‘fseek’ or ‘fseeko’ on
- the STREAM with an OFFSET argument of ‘0L’ and a WHENCE argument of
- ‘SEEK_SET’, except that the return value is discarded and the error
- indicator for the stream is reset.
- These three aliases for the ‘SEEK_...’ constants exist for the sake
- of compatibility with older BSD systems. They are defined in two
- different header files: ‘fcntl.h’ and ‘sys/file.h’.
- ‘L_SET’
- An alias for ‘SEEK_SET’.
- ‘L_INCR’
- An alias for ‘SEEK_CUR’.
- ‘L_XTND’
- An alias for ‘SEEK_END’.
- File: libc.info, Node: Portable Positioning, Next: Stream Buffering, Prev: File Positioning, Up: I/O on Streams
- 12.19 Portable File-Position Functions
- ======================================
- On GNU systems, the file position is truly a character count. You can
- specify any character count value as an argument to ‘fseek’ or ‘fseeko’
- and get reliable results for any random access file. However, some
- ISO C systems do not represent file positions in this way.
- On some systems where text streams truly differ from binary streams,
- it is impossible to represent the file position of a text stream as a
- count of characters from the beginning of the file. For example, the
- file position on some systems must encode both a record offset within
- the file, and a character offset within the record.
- As a consequence, if you want your programs to be portable to these
- systems, you must observe certain rules:
- • The value returned from ‘ftell’ on a text stream has no predictable
- relationship to the number of characters you have read so far. The
- only thing you can rely on is that you can use it subsequently as
- the OFFSET argument to ‘fseek’ or ‘fseeko’ to move back to the same
- file position.
- • In a call to ‘fseek’ or ‘fseeko’ on a text stream, either the
- OFFSET must be zero, or WHENCE must be ‘SEEK_SET’ and the OFFSET
- must be the result of an earlier call to ‘ftell’ on the same
- stream.
- • The value of the file position indicator of a text stream is
- undefined while there are characters that have been pushed back
- with ‘ungetc’ that haven't been read or discarded. *Note
- Unreading::.
- But even if you observe these rules, you may still have trouble for
- long files, because ‘ftell’ and ‘fseek’ use a ‘long int’ value to
- represent the file position. This type may not have room to encode all
- the file positions in a large file. Using the ‘ftello’ and ‘fseeko’
- functions might help here since the ‘off_t’ type is expected to be able
- to hold all file position values but this still does not help to handle
- additional information which must be associated with a file position.
- So if you do want to support systems with peculiar encodings for the
- file positions, it is better to use the functions ‘fgetpos’ and
- ‘fsetpos’ instead. These functions represent the file position using
- the data type ‘fpos_t’, whose internal representation varies from system
- to system.
- These symbols are declared in the header file ‘stdio.h’.
- -- Data Type: fpos_t
- This is the type of an object that can encode information about the
- file position of a stream, for use by the functions ‘fgetpos’ and
- ‘fsetpos’.
- In the GNU C Library, ‘fpos_t’ is an opaque data structure that
- contains internal data to represent file offset and conversion
- state information. In other systems, it might have a different
- internal representation.
- When compiling with ‘_FILE_OFFSET_BITS == 64’ on a 32 bit machine
- this type is in fact equivalent to ‘fpos64_t’ since the LFS
- interface transparently replaces the old interface.
- -- Data Type: fpos64_t
- This is the type of an object that can encode information about the
- file position of a stream, for use by the functions ‘fgetpos64’ and
- ‘fsetpos64’.
- In the GNU C Library, ‘fpos64_t’ is an opaque data structure that
- contains internal data to represent file offset and conversion
- state information. In other systems, it might have a different
- internal representation.
- -- Function: int fgetpos (FILE *STREAM, fpos_t *POSITION)
- Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
- | *Note POSIX Safety Concepts::.
- This function stores the value of the file position indicator for
- the stream STREAM in the ‘fpos_t’ object pointed to by POSITION.
- If successful, ‘fgetpos’ returns zero; otherwise it returns a
- nonzero value and stores an implementation-defined positive value
- in ‘errno’.
- When the sources are compiled with ‘_FILE_OFFSET_BITS == 64’ on a
- 32 bit system the function is in fact ‘fgetpos64’. I.e., the LFS
- interface transparently replaces the old interface.
- -- Function: int fgetpos64 (FILE *STREAM, fpos64_t *POSITION)
- Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
- | *Note POSIX Safety Concepts::.
- This function is similar to ‘fgetpos’ but the file position is
- returned in a variable of type ‘fpos64_t’ to which POSITION points.
- If the sources are compiled with ‘_FILE_OFFSET_BITS == 64’ on a 32
- bits machine this function is available under the name ‘fgetpos’
- and so transparently replaces the old interface.
- -- Function: int fsetpos (FILE *STREAM, const fpos_t *POSITION)
- Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
- | *Note POSIX Safety Concepts::.
- This function sets the file position indicator for the stream
- STREAM to the position POSITION, which must have been set by a
- previous call to ‘fgetpos’ on the same stream. If successful,
- ‘fsetpos’ clears the end-of-file indicator on the stream, discards
- any characters that were "pushed back" by the use of ‘ungetc’, and
- returns a value of zero. Otherwise, ‘fsetpos’ returns a nonzero
- value and stores an implementation-defined positive value in
- ‘errno’.
- When the sources are compiled with ‘_FILE_OFFSET_BITS == 64’ on a
- 32 bit system the function is in fact ‘fsetpos64’. I.e., the LFS
- interface transparently replaces the old interface.
- -- Function: int fsetpos64 (FILE *STREAM, const fpos64_t *POSITION)
- Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
- | *Note POSIX Safety Concepts::.
- This function is similar to ‘fsetpos’ but the file position used
- for positioning is provided in a variable of type ‘fpos64_t’ to
- which POSITION points.
- If the sources are compiled with ‘_FILE_OFFSET_BITS == 64’ on a 32
- bits machine this function is available under the name ‘fsetpos’
- and so transparently replaces the old interface.
- File: libc.info, Node: Stream Buffering, Next: Other Kinds of Streams, Prev: Portable Positioning, Up: I/O on Streams
- 12.20 Stream Buffering
- ======================
- Characters that are written to a stream are normally accumulated and
- transmitted asynchronously to the file in a block, instead of appearing
- as soon as they are output by the application program. Similarly,
- streams often retrieve input from the host environment in blocks rather
- than on a character-by-character basis. This is called “buffering”.
- If you are writing programs that do interactive input and output
- using streams, you need to understand how buffering works when you
- design the user interface to your program. Otherwise, you might find
- that output (such as progress or prompt messages) doesn't appear when
- you intended it to, or displays some other unexpected behavior.
- This section deals only with controlling when characters are
- transmitted between the stream and the file or device, and _not_ with
- how things like echoing, flow control, and the like are handled on
- specific classes of devices. For information on common control
- operations on terminal devices, see *note Low-Level Terminal
- Interface::.
- You can bypass the stream buffering facilities altogether by using
- the low-level input and output functions that operate on file
- descriptors instead. *Note Low-Level I/O::.
- * Menu:
- * Buffering Concepts:: Terminology is defined here.
- * Flushing Buffers:: How to ensure that output buffers are flushed.
- * Controlling Buffering:: How to specify what kind of buffering to use.
- File: libc.info, Node: Buffering Concepts, Next: Flushing Buffers, Up: Stream Buffering
- 12.20.1 Buffering Concepts
- --------------------------
- There are three different kinds of buffering strategies:
- • Characters written to or read from an “unbuffered” stream are
- transmitted individually to or from the file as soon as possible.
- • Characters written to a “line buffered” stream are transmitted to
- the file in blocks when a newline character is encountered.
- • Characters written to or read from a “fully buffered” stream are
- transmitted to or from the file in blocks of arbitrary size.
- Newly opened streams are normally fully buffered, with one exception:
- a stream connected to an interactive device such as a terminal is
- initially line buffered. *Note Controlling Buffering::, for information
- on how to select a different kind of buffering. Usually the automatic
- selection gives you the most convenient kind of buffering for the file
- or device you open.
- The use of line buffering for interactive devices implies that output
- messages ending in a newline will appear immediately--which is usually
- what you want. Output that doesn't end in a newline might or might not
- show up immediately, so if you want them to appear immediately, you
- should flush buffered output explicitly with ‘fflush’, as described in
- *note Flushing Buffers::.
- File: libc.info, Node: Flushing Buffers, Next: Controlling Buffering, Prev: Buffering Concepts, Up: Stream Buffering
- 12.20.2 Flushing Buffers
- ------------------------
- “Flushing” output on a buffered stream means transmitting all
- accumulated characters to the file. There are many circumstances when
- buffered output on a stream is flushed automatically:
- • When you try to do output and the output buffer is full.
- • When the stream is closed. *Note Closing Streams::.
- • When the program terminates by calling ‘exit’. *Note Normal
- Termination::.
- • When a newline is written, if the stream is line buffered.
- • Whenever an input operation on _any_ stream actually reads data
- from its file.
- If you want to flush the buffered output at another time, call
- ‘fflush’, which is declared in the header file ‘stdio.h’.
- -- Function: int fflush (FILE *STREAM)
- Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
- | *Note POSIX Safety Concepts::.
- This function causes any buffered output on STREAM to be delivered
- to the file. If STREAM is a null pointer, then ‘fflush’ causes
- buffered output on _all_ open output streams to be flushed.
- This function returns ‘EOF’ if a write error occurs, or zero
- otherwise.
- -- Function: int fflush_unlocked (FILE *STREAM)
- Preliminary: | MT-Safe race:stream | AS-Unsafe corrupt | AC-Unsafe
- corrupt | *Note POSIX Safety Concepts::.
- The ‘fflush_unlocked’ function is equivalent to the ‘fflush’
- function except that it does not implicitly lock the stream.
- The ‘fflush’ function can be used to flush all streams currently
- opened. While this is useful in some situations it does often more than
- necessary since it might be done in situations when terminal input is
- required and the program wants to be sure that all output is visible on
- the terminal. But this means that only line buffered streams have to be
- flushed. Solaris introduced a function especially for this. It was
- always available in the GNU C Library in some form but never officially
- exported.
- -- Function: void _flushlbf (void)
- Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
- | *Note POSIX Safety Concepts::.
- The ‘_flushlbf’ function flushes all line buffered streams
- currently opened.
- This function is declared in the ‘stdio_ext.h’ header.
- In some situations it might be useful to not flush the output pending
- for a stream but instead simply forget it. If transmission is costly
- and the output is not needed anymore this is valid reasoning. In this
- situation a non-standard function introduced in Solaris and available in
- the GNU C Library can be used.
- -- Function: void __fpurge (FILE *STREAM)
- Preliminary: | MT-Safe race:stream | AS-Unsafe corrupt | AC-Unsafe
- corrupt | *Note POSIX Safety Concepts::.
- The ‘__fpurge’ function causes the buffer of the stream STREAM to
- be emptied. If the stream is currently in read mode all input in
- the buffer is lost. If the stream is in output mode the buffered
- output is not written to the device (or whatever other underlying
- storage) and the buffer is cleared.
- This function is declared in ‘stdio_ext.h’.
- File: libc.info, Node: Controlling Buffering, Prev: Flushing Buffers, Up: Stream Buffering
- 12.20.3 Controlling Which Kind of Buffering
- -------------------------------------------
- After opening a stream (but before any other operations have been
- performed on it), you can explicitly specify what kind of buffering you
- want it to have using the ‘setvbuf’ function.
- The facilities listed in this section are declared in the header file
- ‘stdio.h’.
- -- Function: int setvbuf (FILE *STREAM, char *BUF, int MODE, size_t
- SIZE)
- Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
- | *Note POSIX Safety Concepts::.
- This function is used to specify that the stream STREAM should have
- the buffering mode MODE, which can be either ‘_IOFBF’ (for full
- buffering), ‘_IOLBF’ (for line buffering), or ‘_IONBF’ (for
- unbuffered input/output).
- If you specify a null pointer as the BUF argument, then ‘setvbuf’
- allocates a buffer itself using ‘malloc’. This buffer will be
- freed when you close the stream.
- Otherwise, BUF should be a character array that can hold at least
- SIZE characters. You should not free the space for this array as
- long as the stream remains open and this array remains its buffer.
- You should usually either allocate it statically, or ‘malloc’
- (*note Unconstrained Allocation::) the buffer. Using an automatic
- array is not a good idea unless you close the file before exiting
- the block that declares the array.
- While the array remains a stream buffer, the stream I/O functions
- will use the buffer for their internal purposes. You shouldn't try
- to access the values in the array directly while the stream is
- using it for buffering.
- The ‘setvbuf’ function returns zero on success, or a nonzero value
- if the value of MODE is not valid or if the request could not be
- honored.
- -- Macro: int _IOFBF
- The value of this macro is an integer constant expression that can
- be used as the MODE argument to the ‘setvbuf’ function to specify
- that the stream should be fully buffered.
- -- Macro: int _IOLBF
- The value of this macro is an integer constant expression that can
- be used as the MODE argument to the ‘setvbuf’ function to specify
- that the stream should be line buffered.
- -- Macro: int _IONBF
- The value of this macro is an integer constant expression that can
- be used as the MODE argument to the ‘setvbuf’ function to specify
- that the stream should be unbuffered.
- -- Macro: int BUFSIZ
- The value of this macro is an integer constant expression that is
- good to use for the SIZE argument to ‘setvbuf’. This value is
- guaranteed to be at least ‘256’.
- The value of ‘BUFSIZ’ is chosen on each system so as to make stream
- I/O efficient. So it is a good idea to use ‘BUFSIZ’ as the size
- for the buffer when you call ‘setvbuf’.
- Actually, you can get an even better value to use for the buffer
- size by means of the ‘fstat’ system call: it is found in the
- ‘st_blksize’ field of the file attributes. *Note Attribute
- Meanings::.
- Sometimes people also use ‘BUFSIZ’ as the allocation size of
- buffers used for related purposes, such as strings used to receive
- a line of input with ‘fgets’ (*note Character Input::). There is
- no particular reason to use ‘BUFSIZ’ for this instead of any other
- integer, except that it might lead to doing I/O in chunks of an
- efficient size.
- -- Function: void setbuf (FILE *STREAM, char *BUF)
- Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
- | *Note POSIX Safety Concepts::.
- If BUF is a null pointer, the effect of this function is equivalent
- to calling ‘setvbuf’ with a MODE argument of ‘_IONBF’. Otherwise,
- it is equivalent to calling ‘setvbuf’ with BUF, and a MODE of
- ‘_IOFBF’ and a SIZE argument of ‘BUFSIZ’.
- The ‘setbuf’ function is provided for compatibility with old code;
- use ‘setvbuf’ in all new programs.
- -- Function: void setbuffer (FILE *STREAM, char *BUF, size_t SIZE)
- Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
- | *Note POSIX Safety Concepts::.
- If BUF is a null pointer, this function makes STREAM unbuffered.
- Otherwise, it makes STREAM fully buffered using BUF as the buffer.
- The SIZE argument specifies the length of BUF.
- This function is provided for compatibility with old BSD code. Use
- ‘setvbuf’ instead.
- -- Function: void setlinebuf (FILE *STREAM)
- Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
- | *Note POSIX Safety Concepts::.
- This function makes STREAM be line buffered, and allocates the
- buffer for you.
- This function is provided for compatibility with old BSD code. Use
- ‘setvbuf’ instead.
- It is possible to query whether a given stream is line buffered or
- not using a non-standard function introduced in Solaris and available in
- the GNU C Library.
- -- Function: int __flbf (FILE *STREAM)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- The ‘__flbf’ function will return a nonzero value in case the
- stream STREAM is line buffered. Otherwise the return value is
- zero.
- This function is declared in the ‘stdio_ext.h’ header.
- Two more extensions allow to determine the size of the buffer and how
- much of it is used. These functions were also introduced in Solaris.
- -- Function: size_t __fbufsize (FILE *STREAM)
- Preliminary: | MT-Safe race:stream | AS-Unsafe corrupt | AC-Safe |
- *Note POSIX Safety Concepts::.
- The ‘__fbufsize’ function return the size of the buffer in the
- stream STREAM. This value can be used to optimize the use of the
- stream.
- This function is declared in the ‘stdio_ext.h’ header.
- -- Function: size_t __fpending (FILE *STREAM)
- Preliminary: | MT-Safe race:stream | AS-Unsafe corrupt | AC-Safe |
- *Note POSIX Safety Concepts::.
- The ‘__fpending’ function returns the number of bytes currently in
- the output buffer. For wide-oriented streams the measuring unit is
- wide characters. This function should not be used on buffers in
- read mode or opened read-only.
- This function is declared in the ‘stdio_ext.h’ header.
- File: libc.info, Node: Other Kinds of Streams, Next: Formatted Messages, Prev: Stream Buffering, Up: I/O on Streams
- 12.21 Other Kinds of Streams
- ============================
- The GNU C Library provides ways for you to define additional kinds of
- streams that do not necessarily correspond to an open file.
- One such type of stream takes input from or writes output to a
- string. These kinds of streams are used internally to implement the
- ‘sprintf’ and ‘sscanf’ functions. You can also create such a stream
- explicitly, using the functions described in *note String Streams::.
- More generally, you can define streams that do input/output to
- arbitrary objects using functions supplied by your program. This
- protocol is discussed in *note Custom Streams::.
- *Portability Note:* The facilities described in this section are
- specific to GNU. Other systems or C implementations might or might not
- provide equivalent functionality.
- * Menu:
- * String Streams:: Streams that get data from or put data in
- a string or memory buffer.
- * Custom Streams:: Defining your own streams with an arbitrary
- input data source and/or output data sink.
- File: libc.info, Node: String Streams, Next: Custom Streams, Up: Other Kinds of Streams
- 12.21.1 String Streams
- ----------------------
- The ‘fmemopen’ and ‘open_memstream’ functions allow you to do I/O to a
- string or memory buffer. These facilities are declared in ‘stdio.h’.
- -- Function: FILE * fmemopen (void *BUF, size_t SIZE, const char
- *OPENTYPE)
- Preliminary: | MT-Safe | AS-Unsafe heap lock | AC-Unsafe mem lock |
- *Note POSIX Safety Concepts::.
- This function opens a stream that allows the access specified by
- the OPENTYPE argument, that reads from or writes to the buffer
- specified by the argument BUF. This array must be at least SIZE
- bytes long.
- If you specify a null pointer as the BUF argument, ‘fmemopen’
- dynamically allocates an array SIZE bytes long (as with ‘malloc’;
- *note Unconstrained Allocation::). This is really only useful if
- you are going to write things to the buffer and then read them back
- in again, because you have no way of actually getting a pointer to
- the buffer (for this, try ‘open_memstream’, below). The buffer is
- freed when the stream is closed.
- The argument OPENTYPE is the same as in ‘fopen’ (*note Opening
- Streams::). If the OPENTYPE specifies append mode, then the
- initial file position is set to the first null character in the
- buffer. Otherwise the initial file position is at the beginning of
- the buffer.
- When a stream open for writing is flushed or closed, a null
- character (zero byte) is written at the end of the buffer if it
- fits. You should add an extra byte to the SIZE argument to account
- for this. Attempts to write more than SIZE bytes to the buffer
- result in an error.
- For a stream open for reading, null characters (zero bytes) in the
- buffer do not count as "end of file". Read operations indicate end
- of file only when the file position advances past SIZE bytes. So,
- if you want to read characters from a null-terminated string, you
- should supply the length of the string as the SIZE argument.
- Here is an example of using ‘fmemopen’ to create a stream for reading
- from a string:
- #include <stdio.h>
- #include <string.h>
- static char buffer[] = "foobar";
- int
- main (void)
- {
- int ch;
- FILE *stream;
- stream = fmemopen (buffer, strlen (buffer), "r");
- while ((ch = fgetc (stream)) != EOF)
- printf ("Got %c\n", ch);
- fclose (stream);
- return 0;
- }
- This program produces the following output:
- Got f
- Got o
- Got o
- Got b
- Got a
- Got r
- -- Function: FILE * open_memstream (char **PTR, size_t *SIZELOC)
- Preliminary: | MT-Safe | AS-Unsafe heap | AC-Unsafe mem | *Note
- POSIX Safety Concepts::.
- This function opens a stream for writing to a buffer. The buffer
- is allocated dynamically and grown as necessary, using ‘malloc’.
- After you've closed the stream, this buffer is your responsibility
- to clean up using ‘free’ or ‘realloc’. *Note Unconstrained
- Allocation::.
- When the stream is closed with ‘fclose’ or flushed with ‘fflush’,
- the locations PTR and SIZELOC are updated to contain the pointer to
- the buffer and its size. The values thus stored remain valid only
- as long as no further output on the stream takes place. If you do
- more output, you must flush the stream again to store new values
- before you use them again.
- A null character is written at the end of the buffer when the
- stream is flushed, and at the current location when closed (these
- locations may be different if ‘fseek’ is used). This null
- character is _not_ included in the size value stored at SIZELOC.
- You can move the stream's file position with ‘fseek’ or ‘fseeko’
- (*note File Positioning::). Moving the file position past the end
- of the data already written fills the intervening space with
- zeroes. Note that seeking backwards into existing written data
- will change the effective "end of file" used by ‘fflush’ and
- ‘SEEK_END’ (and where the trailing null character is written, when
- closed). Thus, if you wish to do "random-access" I/O in a
- memstream, it's important to use ‘fseek’ to move the file position
- to the desired data end (using ‘SEEK_POS’) before closing it.
- Here is an example of using ‘open_memstream’:
- #include <stdio.h>
- #include <stdlib.h>
- int
- main (void)
- {
- char *bp;
- size_t size;
- FILE *stream;
- stream = open_memstream (&bp, &size);
- fprintf (stream, "hello");
- fflush (stream);
- printf ("buf = `%s', size = %zu\n", bp, size);
- fprintf (stream, ", world");
- fclose (stream);
- printf ("buf = `%s', size = %zu\n", bp, size);
- free (bp);
- return 0;
- }
- This program produces the following output:
- buf = `hello', size = 5
- buf = `hello, world', size = 12
- File: libc.info, Node: Custom Streams, Prev: String Streams, Up: Other Kinds of Streams
- 12.21.2 Programming Your Own Custom Streams
- -------------------------------------------
- This section describes how you can make a stream that gets input from an
- arbitrary data source or writes output to an arbitrary data sink
- programmed by you. We call these “custom streams”. The functions and
- types described here are all GNU extensions.
- * Menu:
- * Streams and Cookies:: The “cookie” records where to fetch or
- store data that is read or written.
- * Hook Functions:: How you should define the four “hook
- functions” that a custom stream needs.
- File: libc.info, Node: Streams and Cookies, Next: Hook Functions, Up: Custom Streams
- 12.21.2.1 Custom Streams and Cookies
- ....................................
- Inside every custom stream is a special object called the “cookie”.
- This is an object supplied by you which records where to fetch or store
- the data read or written. It is up to you to define a data type to use
- for the cookie. The stream functions in the library never refer
- directly to its contents, and they don't even know what the type is;
- they record its address with type ‘void *’.
- To implement a custom stream, you must specify _how_ to fetch or
- store the data in the specified place. You do this by defining “hook
- functions” to read, write, change "file position", and close the stream.
- All four of these functions will be passed the stream's cookie so they
- can tell where to fetch or store the data. The library functions don't
- know what's inside the cookie, but your functions will know.
- When you create a custom stream, you must specify the cookie pointer,
- and also the four hook functions stored in a structure of type
- ‘cookie_io_functions_t’.
- These facilities are declared in ‘stdio.h’.
- -- Data Type: cookie_io_functions_t
- This is a structure type that holds the functions that define the
- communications protocol between the stream and its cookie. It has
- the following members:
- ‘cookie_read_function_t *read’
- This is the function that reads data from the cookie. If the
- value is a null pointer instead of a function, then read
- operations on this stream always return ‘EOF’.
- ‘cookie_write_function_t *write’
- This is the function that writes data to the cookie. If the
- value is a null pointer instead of a function, then data
- written to the stream is discarded.
- ‘cookie_seek_function_t *seek’
- This is the function that performs the equivalent of file
- positioning on the cookie. If the value is a null pointer
- instead of a function, calls to ‘fseek’ or ‘fseeko’ on this
- stream can only seek to locations within the buffer; any
- attempt to seek outside the buffer will return an ‘ESPIPE’
- error.
- ‘cookie_close_function_t *close’
- This function performs any appropriate cleanup on the cookie
- when closing the stream. If the value is a null pointer
- instead of a function, nothing special is done to close the
- cookie when the stream is closed.
- -- Function: FILE * fopencookie (void *COOKIE, const char *OPENTYPE,
- cookie_io_functions_t IO-FUNCTIONS)
- Preliminary: | MT-Safe | AS-Unsafe heap lock | AC-Unsafe mem lock |
- *Note POSIX Safety Concepts::.
- This function actually creates the stream for communicating with
- the COOKIE using the functions in the IO-FUNCTIONS argument. The
- OPENTYPE argument is interpreted as for ‘fopen’; see *note Opening
- Streams::. (But note that the "truncate on open" option is
- ignored.) The new stream is fully buffered.
- The ‘fopencookie’ function returns the newly created stream, or a
- null pointer in case of an error.
- File: libc.info, Node: Hook Functions, Prev: Streams and Cookies, Up: Custom Streams
- 12.21.2.2 Custom Stream Hook Functions
- ......................................
- Here are more details on how you should define the four hook functions
- that a custom stream needs.
- You should define the function to read data from the cookie as:
- ssize_t READER (void *COOKIE, char *BUFFER, size_t SIZE)
- This is very similar to the ‘read’ function; see *note I/O
- Primitives::. Your function should transfer up to SIZE bytes into the
- BUFFER, and return the number of bytes read, or zero to indicate
- end-of-file. You can return a value of ‘-1’ to indicate an error.
- You should define the function to write data to the cookie as:
- ssize_t WRITER (void *COOKIE, const char *BUFFER, size_t SIZE)
- This is very similar to the ‘write’ function; see *note I/O
- Primitives::. Your function should transfer up to SIZE bytes from the
- buffer, and return the number of bytes written. You can return a value
- of ‘0’ to indicate an error. You must not return any negative value.
- You should define the function to perform seek operations on the
- cookie as:
- int SEEKER (void *COOKIE, off64_t *POSITION, int WHENCE)
- For this function, the POSITION and WHENCE arguments are interpreted
- as for ‘fgetpos’; see *note Portable Positioning::.
- After doing the seek operation, your function should store the
- resulting file position relative to the beginning of the file in
- POSITION. Your function should return a value of ‘0’ on success and
- ‘-1’ to indicate an error.
- You should define the function to do cleanup operations on the cookie
- appropriate for closing the stream as:
- int CLEANER (void *COOKIE)
- Your function should return ‘-1’ to indicate an error, and ‘0’
- otherwise.
- -- Data Type: cookie_read_function_t
- This is the data type that the read function for a custom stream
- should have. If you declare the function as shown above, this is
- the type it will have.
- -- Data Type: cookie_write_function_t
- The data type of the write function for a custom stream.
- -- Data Type: cookie_seek_function_t
- The data type of the seek function for a custom stream.
- -- Data Type: cookie_close_function_t
- The data type of the close function for a custom stream.
- File: libc.info, Node: Formatted Messages, Prev: Other Kinds of Streams, Up: I/O on Streams
- 12.22 Formatted Messages
- ========================
- On systems which are based on System V messages of programs (especially
- the system tools) are printed in a strict form using the ‘fmtmsg’
- function. The uniformity sometimes helps the user to interpret messages
- and the strictness tests of the ‘fmtmsg’ function ensure that the
- programmer follows some minimal requirements.
- * Menu:
- * Printing Formatted Messages:: The ‘fmtmsg’ function.
- * Adding Severity Classes:: Add more severity classes.
- * Example:: How to use ‘fmtmsg’ and ‘addseverity’.
- File: libc.info, Node: Printing Formatted Messages, Next: Adding Severity Classes, Up: Formatted Messages
- 12.22.1 Printing Formatted Messages
- -----------------------------------
- Messages can be printed to standard error and/or to the console. To
- select the destination the programmer can use the following two values,
- bitwise OR combined if wanted, for the CLASSIFICATION parameter of
- ‘fmtmsg’:
- ‘MM_PRINT’
- Display the message in standard error.
- ‘MM_CONSOLE’
- Display the message on the system console.
- The erroneous piece of the system can be signalled by exactly one of
- the following values which also is bitwise ORed with the CLASSIFICATION
- parameter to ‘fmtmsg’:
- ‘MM_HARD’
- The source of the condition is some hardware.
- ‘MM_SOFT’
- The source of the condition is some software.
- ‘MM_FIRM’
- The source of the condition is some firmware.
- A third component of the CLASSIFICATION parameter to ‘fmtmsg’ can
- describe the part of the system which detects the problem. This is done
- by using exactly one of the following values:
- ‘MM_APPL’
- The erroneous condition is detected by the application.
- ‘MM_UTIL’
- The erroneous condition is detected by a utility.
- ‘MM_OPSYS’
- The erroneous condition is detected by the operating system.
- A last component of CLASSIFICATION can signal the results of this
- message. Exactly one of the following values can be used:
- ‘MM_RECOVER’
- It is a recoverable error.
- ‘MM_NRECOV’
- It is a non-recoverable error.
- -- Function: int fmtmsg (long int CLASSIFICATION, const char *LABEL,
- int SEVERITY, const char *TEXT, const char *ACTION, const char
- *TAG)
- Preliminary: | MT-Safe | AS-Unsafe lock | AC-Safe | *Note POSIX
- Safety Concepts::.
- Display a message described by its parameters on the device(s)
- specified in the CLASSIFICATION parameter. The LABEL parameter
- identifies the source of the message. The string should consist of
- two colon separated parts where the first part has not more than 10
- and the second part not more than 14 characters. The TEXT
- parameter describes the condition of the error, the ACTION
- parameter possible steps to recover from the error and the TAG
- parameter is a reference to the online documentation where more
- information can be found. It should contain the LABEL value and a
- unique identification number.
- Each of the parameters can be a special value which means this
- value is to be omitted. The symbolic names for these values are:
- ‘MM_NULLLBL’
- Ignore LABEL parameter.
- ‘MM_NULLSEV’
- Ignore SEVERITY parameter.
- ‘MM_NULLMC’
- Ignore CLASSIFICATION parameter. This implies that nothing is
- actually printed.
- ‘MM_NULLTXT’
- Ignore TEXT parameter.
- ‘MM_NULLACT’
- Ignore ACTION parameter.
- ‘MM_NULLTAG’
- Ignore TAG parameter.
- There is another way certain fields can be omitted from the output
- to standard error. This is described below in the description of
- environment variables influencing the behavior.
- The SEVERITY parameter can have one of the values in the following
- table:
- ‘MM_NOSEV’
- Nothing is printed, this value is the same as ‘MM_NULLSEV’.
- ‘MM_HALT’
- This value is printed as ‘HALT’.
- ‘MM_ERROR’
- This value is printed as ‘ERROR’.
- ‘MM_WARNING’
- This value is printed as ‘WARNING’.
- ‘MM_INFO’
- This value is printed as ‘INFO’.
- The numeric value of these five macros are between ‘0’ and ‘4’.
- Using the environment variable ‘SEV_LEVEL’ or using the
- ‘addseverity’ function one can add more severity levels with their
- corresponding string to print. This is described below (*note
- Adding Severity Classes::).
- If no parameter is ignored the output looks like this:
- LABEL: SEVERITY-STRING: TEXT
- TO FIX: ACTION TAG
- The colons, new line characters and the ‘TO FIX’ string are
- inserted if necessary, i.e., if the corresponding parameter is not
- ignored.
- This function is specified in the X/Open Portability Guide. It is
- also available on all systems derived from System V.
- The function returns the value ‘MM_OK’ if no error occurred. If
- only the printing to standard error failed, it returns ‘MM_NOMSG’.
- If printing to the console fails, it returns ‘MM_NOCON’. If
- nothing is printed ‘MM_NOTOK’ is returned. Among situations where
- all outputs fail this last value is also returned if a parameter
- value is incorrect.
- There are two environment variables which influence the behavior of
- ‘fmtmsg’. The first is ‘MSGVERB’. It is used to control the output
- actually happening on standard error (_not_ the console output). Each
- of the five fields can explicitly be enabled. To do this the user has
- to put the ‘MSGVERB’ variable with a format like the following in the
- environment before calling the ‘fmtmsg’ function the first time:
- MSGVERB=KEYWORD[:KEYWORD[:...]]
- Valid KEYWORDs are ‘label’, ‘severity’, ‘text’, ‘action’, and ‘tag’.
- If the environment variable is not given or is the empty string, a not
- supported keyword is given or the value is somehow else invalid, no part
- of the message is masked out.
- The second environment variable which influences the behavior of
- ‘fmtmsg’ is ‘SEV_LEVEL’. This variable and the change in the behavior
- of ‘fmtmsg’ is not specified in the X/Open Portability Guide. It is
- available in System V systems, though. It can be used to introduce new
- severity levels. By default, only the five severity levels described
- above are available. Any other numeric value would make ‘fmtmsg’ print
- nothing.
- If the user puts ‘SEV_LEVEL’ with a format like
- SEV_LEVEL=[DESCRIPTION[:DESCRIPTION[:...]]]
- in the environment of the process before the first call to ‘fmtmsg’,
- where DESCRIPTION has a value of the form
- SEVERITY-KEYWORD,LEVEL,PRINTSTRING
- The SEVERITY-KEYWORD part is not used by ‘fmtmsg’ but it has to be
- present. The LEVEL part is a string representation of a number. The
- numeric value must be a number greater than 4. This value must be used
- in the SEVERITY parameter of ‘fmtmsg’ to select this class. It is not
- possible to overwrite any of the predefined classes. The PRINTSTRING is
- the string printed when a message of this class is processed by ‘fmtmsg’
- (see above, ‘fmtsmg’ does not print the numeric value but instead the
- string representation).
- File: libc.info, Node: Adding Severity Classes, Next: Example, Prev: Printing Formatted Messages, Up: Formatted Messages
- 12.22.2 Adding Severity Classes
- -------------------------------
- There is another possibility to introduce severity classes besides using
- the environment variable ‘SEV_LEVEL’. This simplifies the task of
- introducing new classes in a running program. One could use the
- ‘setenv’ or ‘putenv’ function to set the environment variable, but this
- is toilsome.
- -- Function: int addseverity (int SEVERITY, const char *STRING)
- Preliminary: | MT-Safe | AS-Unsafe heap lock | AC-Unsafe lock mem |
- *Note POSIX Safety Concepts::.
- This function allows the introduction of new severity classes which
- can be addressed by the SEVERITY parameter of the ‘fmtmsg’
- function. The SEVERITY parameter of ‘addseverity’ must match the
- value for the parameter with the same name of ‘fmtmsg’, and STRING
- is the string printed in the actual messages instead of the numeric
- value.
- If STRING is ‘NULL’ the severity class with the numeric value
- according to SEVERITY is removed.
- It is not possible to overwrite or remove one of the default
- severity classes. All calls to ‘addseverity’ with SEVERITY set to
- one of the values for the default classes will fail.
- The return value is ‘MM_OK’ if the task was successfully performed.
- If the return value is ‘MM_NOTOK’ something went wrong. This could
- mean that no more memory is available or a class is not available
- when it has to be removed.
- This function is not specified in the X/Open Portability Guide
- although the ‘fmtsmg’ function is. It is available on System V
- systems.
- File: libc.info, Node: Example, Prev: Adding Severity Classes, Up: Formatted Messages
- 12.22.3 How to use ‘fmtmsg’ and ‘addseverity’
- ---------------------------------------------
- Here is a simple example program to illustrate the use of both functions
- described in this section.
- #include <fmtmsg.h>
- int
- main (void)
- {
- addseverity (5, "NOTE2");
- fmtmsg (MM_PRINT, "only1field", MM_INFO, "text2", "action2", "tag2");
- fmtmsg (MM_PRINT, "UX:cat", 5, "invalid syntax", "refer to manual",
- "UX:cat:001");
- fmtmsg (MM_PRINT, "label:foo", 6, "text", "action", "tag");
- return 0;
- }
- The second call to ‘fmtmsg’ illustrates a use of this function as it
- usually occurs on System V systems, which heavily use this function. It
- seems worthwhile to give a short explanation here of how this system
- works on System V. The value of the LABEL field (‘UX:cat’) says that the
- error occurred in the Unix program ‘cat’. The explanation of the error
- follows and the value for the ACTION parameter is ‘"refer to manual"’.
- One could be more specific here, if necessary. The TAG field contains,
- as proposed above, the value of the string given for the LABEL
- parameter, and additionally a unique ID (‘001’ in this case). For a GNU
- environment this string could contain a reference to the corresponding
- node in the Info page for the program.
- Running this program without specifying the ‘MSGVERB’ and ‘SEV_LEVEL’
- function produces the following output:
- UX:cat: NOTE2: invalid syntax
- TO FIX: refer to manual UX:cat:001
- We see the different fields of the message and how the extra glue
- (the colons and the ‘TO FIX’ string) is printed. But only one of the
- three calls to ‘fmtmsg’ produced output. The first call does not print
- anything because the LABEL parameter is not in the correct form. The
- string must contain two fields, separated by a colon (*note Printing
- Formatted Messages::). The third ‘fmtmsg’ call produced no output since
- the class with the numeric value ‘6’ is not defined. Although a class
- with numeric value ‘5’ is also not defined by default, the call to
- ‘addseverity’ introduces it and the second call to ‘fmtmsg’ produces the
- above output.
- When we change the environment of the program to contain
- ‘SEV_LEVEL=XXX,6,NOTE’ when running it we get a different result:
- UX:cat: NOTE2: invalid syntax
- TO FIX: refer to manual UX:cat:001
- label:foo: NOTE: text
- TO FIX: action tag
- Now the third call to ‘fmtmsg’ produced some output and we see how
- the string ‘NOTE’ from the environment variable appears in the message.
- Now we can reduce the output by specifying which fields we are
- interested in. If we additionally set the environment variable
- ‘MSGVERB’ to the value ‘severity:label:action’ we get the following
- output:
- UX:cat: NOTE2
- TO FIX: refer to manual
- label:foo: NOTE
- TO FIX: action
- I.e., the output produced by the TEXT and the TAG parameters to ‘fmtmsg’
- vanished. Please also note that now there is no colon after the ‘NOTE’
- and ‘NOTE2’ strings in the output. This is not necessary since there is
- no more output on this line because the text is missing.
- File: libc.info, Node: Low-Level I/O, Next: File System Interface, Prev: I/O on Streams, Up: Top
- 13 Low-Level Input/Output
- *************************
- This chapter describes functions for performing low-level input/output
- operations on file descriptors. These functions include the primitives
- for the higher-level I/O functions described in *note I/O on Streams::,
- as well as functions for performing low-level control operations for
- which there are no equivalents on streams.
- Stream-level I/O is more flexible and usually more convenient;
- therefore, programmers generally use the descriptor-level functions only
- when necessary. These are some of the usual reasons:
- • For reading binary files in large chunks.
- • For reading an entire file into core before parsing it.
- • To perform operations other than data transfer, which can only be
- done with a descriptor. (You can use ‘fileno’ to get the
- descriptor corresponding to a stream.)
- • To pass descriptors to a child process. (The child can create its
- own stream to use a descriptor that it inherits, but cannot inherit
- a stream directly.)
- * Menu:
- * Opening and Closing Files:: How to open and close file
- descriptors.
- * I/O Primitives:: Reading and writing data.
- * File Position Primitive:: Setting a descriptor's file
- position.
- * Descriptors and Streams:: Converting descriptor to stream
- or vice-versa.
- * Stream/Descriptor Precautions:: Precautions needed if you use both
- descriptors and streams.
- * Scatter-Gather:: Fast I/O to discontinuous buffers.
- * Copying File Data:: Copying data between files.
- * Memory-mapped I/O:: Using files like memory.
- * Waiting for I/O:: How to check for input or output
- on multiple file descriptors.
- * Synchronizing I/O:: Making sure all I/O actions completed.
- * Asynchronous I/O:: Perform I/O in parallel.
- * Control Operations:: Various other operations on file
- descriptors.
- * Duplicating Descriptors:: Fcntl commands for duplicating
- file descriptors.
- * Descriptor Flags:: Fcntl commands for manipulating
- flags associated with file
- descriptors.
- * File Status Flags:: Fcntl commands for manipulating
- flags associated with open files.
- * File Locks:: Fcntl commands for implementing
- file locking.
- * Open File Description Locks:: Fcntl commands for implementing
- open file description locking.
- * Open File Description Locks Example:: An example of open file description lock
- usage
- * Interrupt Input:: Getting an asynchronous signal when
- input arrives.
- * IOCTLs:: Generic I/O Control operations.
- * Other Low-Level I/O APIs:: Other low-level-I/O-related functions.
- File: libc.info, Node: Opening and Closing Files, Next: I/O Primitives, Up: Low-Level I/O
- 13.1 Opening and Closing Files
- ==============================
- This section describes the primitives for opening and closing files
- using file descriptors. The ‘open’ and ‘creat’ functions are declared
- in the header file ‘fcntl.h’, while ‘close’ is declared in ‘unistd.h’.
- -- Function: int open (const char *FILENAME, int FLAGS[, mode_t MODE])
- Preliminary: | MT-Safe | AS-Safe | AC-Safe fd | *Note POSIX Safety
- Concepts::.
- The ‘open’ function creates and returns a new file descriptor for
- the file named by FILENAME. Initially, the file position indicator
- for the file is at the beginning of the file. The argument MODE
- (*note Permission Bits::) is used only when a file is created, but
- it doesn't hurt to supply the argument in any case.
- The FLAGS argument controls how the file is to be opened. This is
- a bit mask; you create the value by the bitwise OR of the
- appropriate parameters (using the ‘|’ operator in C). *Note File
- Status Flags::, for the parameters available.
- The normal return value from ‘open’ is a non-negative integer file
- descriptor. In the case of an error, a value of -1 is returned
- instead. In addition to the usual file name errors (*note File
- Name Errors::), the following ‘errno’ error conditions are defined
- for this function:
- ‘EACCES’
- The file exists but is not readable/writable as requested by
- the FLAGS argument, or the file does not exist and the
- directory is unwritable so it cannot be created.
- ‘EEXIST’
- Both ‘O_CREAT’ and ‘O_EXCL’ are set, and the named file
- already exists.
- ‘EINTR’
- The ‘open’ operation was interrupted by a signal. *Note
- Interrupted Primitives::.
- ‘EISDIR’
- The FLAGS argument specified write access, and the file is a
- directory.
- ‘EMFILE’
- The process has too many files open. The maximum number of
- file descriptors is controlled by the ‘RLIMIT_NOFILE’ resource
- limit; *note Limits on Resources::.
- ‘ENFILE’
- The entire system, or perhaps the file system which contains
- the directory, cannot support any additional open files at the
- moment. (This problem cannot happen on GNU/Hurd systems.)
- ‘ENOENT’
- The named file does not exist, and ‘O_CREAT’ is not specified.
- ‘ENOSPC’
- The directory or file system that would contain the new file
- cannot be extended, because there is no disk space left.
- ‘ENXIO’
- ‘O_NONBLOCK’ and ‘O_WRONLY’ are both set in the FLAGS
- argument, the file named by FILENAME is a FIFO (*note Pipes
- and FIFOs::), and no process has the file open for reading.
- ‘EROFS’
- The file resides on a read-only file system and any of
- ‘O_WRONLY’, ‘O_RDWR’, and ‘O_TRUNC’ are set in the FLAGS
- argument, or ‘O_CREAT’ is set and the file does not already
- exist.
- If on a 32 bit machine the sources are translated with
- ‘_FILE_OFFSET_BITS == 64’ the function ‘open’ returns a file
- descriptor opened in the large file mode which enables the file
- handling functions to use files up to 2^63 bytes in size and offset
- from −2^63 to 2^63. This happens transparently for the user since
- all of the low-level file handling functions are equally replaced.
- This function is a cancellation point in multi-threaded programs.
- This is a problem if the thread allocates some resources (like
- memory, file descriptors, semaphores or whatever) at the time
- ‘open’ is called. If the thread gets canceled these resources stay
- allocated until the program ends. To avoid this calls to ‘open’
- should be protected using cancellation handlers.
- The ‘open’ function is the underlying primitive for the ‘fopen’ and
- ‘freopen’ functions, that create streams.
- -- Function: int open64 (const char *FILENAME, int FLAGS[, mode_t
- MODE])
- Preliminary: | MT-Safe | AS-Safe | AC-Safe fd | *Note POSIX Safety
- Concepts::.
- This function is similar to ‘open’. It returns a file descriptor
- which can be used to access the file named by FILENAME. The only
- difference is that on 32 bit systems the file is opened in the
- large file mode. I.e., file length and file offsets can exceed 31
- bits.
- When the sources are translated with ‘_FILE_OFFSET_BITS == 64’ this
- function is actually available under the name ‘open’. I.e., the
- new, extended API using 64 bit file sizes and offsets transparently
- replaces the old API.
- -- Function: int openat (int FILEDES, const char *FILENAME, int FLAGS[,
- mode_t MODE])
- Preliminary: | MT-Safe | AS-Safe | AC-Safe fd | *Note POSIX Safety
- Concepts::.
- This function is the descriptor-relative variant of the ‘open’
- function. *Note Descriptor-Relative Access::.
- Note that the FLAGS argument of ‘openat’ does not accept ‘AT_...’
- flags, only the flags described for the ‘open’ function above.
- The ‘openat’ function can fail for additional reasons:
- ‘EBADF’
- The FILEDES argument is not a valid file descriptor.
- ‘ENOTDIR’
- The descriptor FILEDES is not associated with a directory, and
- FILENAME is a relative file name.
- When the sources are compiled with ‘_FILE_OFFSET_BITS == 64’ this
- function is in fact ‘openat64’ since the LFS interface
- transparently replaces the normal implementation.
- -- Function: int openat64 (int FILEDES, const char *FILENAME, int
- FLAGS[, mode_t MODE])
- The large-file variant of the ‘openat’, similar to how ‘open64’ is
- the large-file variant of ‘open’.
- When the sources are translated with ‘_FILE_OFFSET_BITS == 64’ this
- function is actually available under the name ‘openat’. I.e., the
- new, extended API using 64 bit file sizes and offsets transparently
- replaces the old API.
- -- Data Type: struct open_how
- The ‘open_how’ structure describes how to open a file using
- ‘openat2’.
- *Portability note:* In the future, additional fields can be added
- to ‘struct open_how’, so that the size of this data type increases.
- Do not use it in places where this matters, such as structure
- fields in installed header files, where such a change could affect
- the application binary interface (ABI).
- The following generic fields are available.
- ‘flags’
- This field specifies the file creation and file status flags
- to use when opening the file. All of the ‘O_*’ flags defined
- for ‘openat’ are valid. The ‘openat2’ is stricter than
- ‘openat’ in rejecting unknown or conflicting values. For
- example, ‘openat2’ rejects a mode that exceeds 07777, whereas
- ‘openat’ silently ignores excess high-order bits.
- ‘mode’
- This field specifies the mode for the new file, similar to
- ‘mode’ argument of ‘openat’. It should be in the range
- 0..07777.
- ‘resolve’
- This is a bitmask of flags that affect the resolution of file
- name components. Unlike ‘O_NOFOLLOW’, it affects all file
- name components, not just the last one. The following flags
- are available.
- ‘RESOLVE_NO_XDEV’
- Disallow traversal of mount points during path resolution
- (including all bind mounts).
- ‘RESOLVE_NO_MAGICLINKS’
- Disallow all *magic-link* resolution during path
- resolution. Magic links are symbolic link-like objects
- that are found in *procfs*; for example the
- ‘/proc/pid/exe’.
- ‘RESOLVE_NO_SYMLINKS’
- Disallow resolution of symbolic links during path
- resolution. This option implies ‘RESOLVE_NO_MAGICLINKS’.
- ‘RESOLVE_BENEATH’
- This rejects absolute pathnames, pathnames containing
- ‘..’ components that would be resolved relative to DFD,
- and symbolic links that resolve to pathnames that would
- be rejected. The rejection occurs even if DFD is the
- root directory.
- ‘RESOLVE_IN_ROOT’
- Treat absolute pathnames as being relative to DFD, treat
- a ‘..’ component as being equivalent to ‘.’ if it is
- resolved relative to DFD, and treat symbolic link
- contents consistently with this.
- -- Function: int openat2 (int DIRFD, const char *PATHNAME, const struct
- open_how *HOW, size_t SIZE)
- | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety Concepts::.
- This function is an extension of the ‘openat’ and provides a
- superset of its functionality. *Note Descriptor-Relative Access::.
- The SIZE argument must equal ‘sizeof *HOW’. For portability to
- future API versions that may extend ‘struct open_how’, ‘*HOW’
- should be fully initialized e.g., by a struct initializer, by
- ‘memset’ to zero, or by having static storage duration.
- On failure, ‘openat2’ returns -1 and sets ‘errno’. It can fail for
- any of the reasons ‘openat’ fails, plus the following reasons:
- ‘E2BIG’
- SIZE is too large for any future extension, ‘*HOW’ contains
- non-zero members that are future extensions not supported by
- this kernel
- ‘EINVAL’
- An unknown flag or invalid value was used on ‘*HOW’; or
- ‘HOW->mode’ is non-zero, but ‘HOW->flags’ does not contain
- ‘O_CREAT’ or ‘O_TMPFILE’, or SIZE is smaller than the ones
- supported by the kernel.
- It can also return all the errors ‘openat’ returns.
- Similar to ‘openat’, ‘openat2’ is a cancellation point.
- Unlike other ‘open’-like functions, this function ignores
- ‘_FILE_OFFSET_BITS’ and always operates in large file mode.
- -- Obsolete function: int creat (const char *FILENAME, mode_t MODE)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe fd | *Note POSIX Safety
- Concepts::.
- This function is obsolete. The call:
- creat (FILENAME, MODE)
- is equivalent to:
- open (FILENAME, O_WRONLY | O_CREAT | O_TRUNC, MODE)
- If on a 32 bit machine the sources are translated with
- ‘_FILE_OFFSET_BITS == 64’ the function ‘creat’ returns a file
- descriptor opened in the large file mode which enables the file
- handling functions to use files up to 2^63 in size and offset from
- −2^63 to 2^63. This happens transparently for the user since all
- of the low-level file handling functions are equally replaced.
- -- Obsolete function: int creat64 (const char *FILENAME, mode_t MODE)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe fd | *Note POSIX Safety
- Concepts::.
- This function is similar to ‘creat’. It returns a file descriptor
- which can be used to access the file named by FILENAME. The only
- difference is that on 32 bit systems the file is opened in the
- large file mode. I.e., file length and file offsets can exceed 31
- bits.
- To use this file descriptor one must not use the normal operations
- but instead the counterparts named ‘*64’, e.g., ‘read64’.
- When the sources are translated with ‘_FILE_OFFSET_BITS == 64’ this
- function is actually available under the name ‘open’. I.e., the
- new, extended API using 64 bit file sizes and offsets transparently
- replaces the old API.
- -- Function: int close (int FILEDES)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe fd | *Note POSIX Safety
- Concepts::.
- The function ‘close’ closes the file descriptor FILEDES. Closing a
- file has the following consequences:
- • The file descriptor is deallocated.
- • Any record locks owned by the process on the file are
- unlocked.
- • When all file descriptors associated with a pipe or FIFO have
- been closed, any unread data is discarded.
- This function is a cancellation point in multi-threaded programs.
- This is a problem if the thread allocates some resources (like
- memory, file descriptors, semaphores or whatever) at the time
- ‘close’ is called. If the thread gets canceled these resources
- stay allocated until the program ends. To avoid this, calls to
- ‘close’ should be protected using cancellation handlers.
- The normal return value from ‘close’ is 0; a value of -1 is
- returned in case of failure. The following ‘errno’ error
- conditions are defined for this function:
- ‘EBADF’
- The FILEDES argument is not a valid file descriptor.
- ‘EINTR’
- The ‘close’ call was interrupted by a signal. *Note
- Interrupted Primitives::. Here is an example of how to handle
- ‘EINTR’ properly:
- TEMP_FAILURE_RETRY (close (desc));
- ‘ENOSPC’
- ‘EIO’
- ‘EDQUOT’
- When the file is accessed by NFS, these errors from ‘write’
- can sometimes not be detected until ‘close’. *Note I/O
- Primitives::, for details on their meaning.
- Please note that there is _no_ separate ‘close64’ function. This
- is not necessary since this function does not determine nor depend
- on the mode of the file. The kernel which performs the ‘close’
- operation knows which mode the descriptor is used for and can
- handle this situation.
- To close a stream, call ‘fclose’ (*note Closing Streams::) instead of
- trying to close its underlying file descriptor with ‘close’. This
- flushes any buffered output and updates the stream object to indicate
- that it is closed.
- -- Function: int close_range (unsigned int LOWFD, unsigned int MAXFD,
- int FLAGS)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe fd | *Note POSIX Safety
- Concepts::.
- The function ‘close_range’ closes the file descriptor from LOWFD to
- MAXFD (inclusive). This function is similar to call ‘close’ in
- specified file descriptor range depending on the FLAGS.
- This is function is only supported on recent Linux versions and the
- GNU C Library does not provide any fallback (the application will
- need to handle possible ‘ENOSYS’).
- The FLAGS add options on how the files are closes. Linux currently
- supports:
- ‘CLOSE_RANGE_UNSHARE’
- Unshare the file descriptor table before closing file
- descriptors.
- ‘CLOSE_RANGE_CLOEXEC’
- Set the ‘FD_CLOEXEC’ bit instead of closing the file
- descriptor.
- The normal return value from ‘close_range’ is 0; a value of -1 is
- returned in case of failure. The following ‘errno’ error
- conditions are defined for this function:
- ‘EINVAL’
- The LOWFD value is larger than MAXFD or an unsupported FLAGS
- is used.
- ‘ENOMEM’
- Either there is not enough memory for the operation, or the
- process is out of address space. It can only happen when
- ‘CLOSE_RANGE_UNSHARED’ flag is used.
- ‘EMFILE’
- The process has too many files open and it can only happens
- when ‘CLOSE_RANGE_UNSHARED’ flag is used. The maximum number
- of file descriptors is controlled by the ‘RLIMIT_NOFILE’
- resource limit; *note Limits on Resources::.
- ‘ENOSYS’
- The kernel does not implement the required functionality.
- -- Function: void closefrom (int LOWFD)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe fd | *Note POSIX Safety
- Concepts::.
- The function ‘closefrom’ closes all file descriptors greater than
- or equal to LOWFD. This function is similar to calling ‘close’ for
- all open file descriptors not less than LOWFD.
- Already closed file descriptors are ignored.
- File: libc.info, Node: I/O Primitives, Next: File Position Primitive, Prev: Opening and Closing Files, Up: Low-Level I/O
- 13.2 Input and Output Primitives
- ================================
- This section describes the functions for performing primitive input and
- output operations on file descriptors: ‘read’, ‘write’, and ‘lseek’.
- These functions are declared in the header file ‘unistd.h’.
- -- Data Type: ssize_t
- This data type is used to represent the sizes of blocks that can be
- read or written in a single operation. It is similar to ‘size_t’,
- but must be a signed type.
- -- Function: ssize_t read (int FILEDES, void *BUFFER, size_t SIZE)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- The ‘read’ function reads up to SIZE bytes from the file with
- descriptor FILEDES, storing the results in the BUFFER. (This is
- not necessarily a character string, and no terminating null
- character is added.)
- The return value is the number of bytes actually read. This might
- be less than SIZE; for example, if there aren't that many bytes
- left in the file or if there aren't that many bytes immediately
- available. The exact behavior depends on what kind of file it is.
- Note that reading less than SIZE bytes is not an error.
- A value of zero indicates end-of-file (except if the value of the
- SIZE argument is also zero). This is not considered an error. If
- you keep calling ‘read’ while at end-of-file, it will keep
- returning zero and doing nothing else.
- If ‘read’ returns at least one character, there is no way you can
- tell whether end-of-file was reached. But if you did reach the
- end, the next read will return zero.
- In case of an error, ‘read’ returns -1. The following ‘errno’
- error conditions are defined for this function:
- ‘EAGAIN’
- Normally, when no input is immediately available, ‘read’ waits
- for some input. But if the ‘O_NONBLOCK’ flag is set for the
- file (*note File Status Flags::), ‘read’ returns immediately
- without reading any data, and reports this error.
- *Compatibility Note:* Most versions of BSD Unix use a
- different error code for this: ‘EWOULDBLOCK’. In the GNU C
- Library, ‘EWOULDBLOCK’ is an alias for ‘EAGAIN’, so it doesn't
- matter which name you use.
- On some systems, reading a large amount of data from a
- character special file can also fail with ‘EAGAIN’ if the
- kernel cannot find enough physical memory to lock down the
- user's pages. This is limited to devices that transfer with
- direct memory access into the user's memory, which means it
- does not include terminals, since they always use separate
- buffers inside the kernel. This problem never happens on
- GNU/Hurd systems.
- Any condition that could result in ‘EAGAIN’ can instead result
- in a successful ‘read’ which returns fewer bytes than
- requested. Calling ‘read’ again immediately would result in
- ‘EAGAIN’.
- ‘EBADF’
- The FILEDES argument is not a valid file descriptor, or is not
- open for reading.
- ‘EINTR’
- ‘read’ was interrupted by a signal while it was waiting for
- input. *Note Interrupted Primitives::. A signal will not
- necessarily cause ‘read’ to return ‘EINTR’; it may instead
- result in a successful ‘read’ which returns fewer bytes than
- requested.
- ‘EIO’
- For many devices, and for disk files, this error code
- indicates a hardware error.
- ‘EIO’ also occurs when a background process tries to read from
- the controlling terminal, and the normal action of stopping
- the process by sending it a ‘SIGTTIN’ signal isn't working.
- This might happen if the signal is being blocked or ignored,
- or because the process group is orphaned. *Note Job
- Control::, for more information about job control, and *note
- Signal Handling::, for information about signals.
- ‘EINVAL’
- In some systems, when reading from a character or block
- device, position and size offsets must be aligned to a
- particular block size. This error indicates that the offsets
- were not properly aligned.
- Please note that there is no function named ‘read64’. This is not
- necessary since this function does not directly modify or handle
- the possibly wide file offset. Since the kernel handles this state
- internally, the ‘read’ function can be used for all cases.
- This function is a cancellation point in multi-threaded programs.
- This is a problem if the thread allocates some resources (like
- memory, file descriptors, semaphores or whatever) at the time
- ‘read’ is called. If the thread gets canceled these resources stay
- allocated until the program ends. To avoid this, calls to ‘read’
- should be protected using cancellation handlers.
- The ‘read’ function is the underlying primitive for all of the
- functions that read from streams, such as ‘fgetc’.
- -- Function: ssize_t pread (int FILEDES, void *BUFFER, size_t SIZE,
- off_t OFFSET)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- The ‘pread’ function is similar to the ‘read’ function. The first
- three arguments are identical, and the return values and error
- codes also correspond.
- The difference is the fourth argument and its handling. The data
- block is not read from the current position of the file descriptor
- ‘filedes’. Instead the data is read from the file starting at
- position OFFSET. The position of the file descriptor itself is not
- affected by the operation. The value is the same as before the
- call.
- When the source file is compiled with ‘_FILE_OFFSET_BITS == 64’ the
- ‘pread’ function is in fact ‘pread64’ and the type ‘off_t’ has 64
- bits, which makes it possible to handle files up to 2^63 bytes in
- length.
- The return value of ‘pread’ describes the number of bytes read. In
- the error case it returns -1 like ‘read’ does and the error codes
- are also the same, with these additions:
- ‘EINVAL’
- The value given for OFFSET is negative and therefore illegal.
- ‘ESPIPE’
- The file descriptor FILEDES is associated with a pipe or a
- FIFO and this device does not allow positioning of the file
- pointer.
- The function is an extension defined in the Unix Single
- Specification version 2.
- -- Function: ssize_t pread64 (int FILEDES, void *BUFFER, size_t SIZE,
- off64_t OFFSET)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function is similar to the ‘pread’ function. The difference
- is that the OFFSET parameter is of type ‘off64_t’ instead of
- ‘off_t’ which makes it possible on 32 bit machines to address files
- larger than 2^31 bytes and up to 2^63 bytes. The file descriptor
- ‘filedes’ must be opened using ‘open64’ since otherwise the large
- offsets possible with ‘off64_t’ will lead to errors with a
- descriptor in small file mode.
- When the source file is compiled with ‘_FILE_OFFSET_BITS == 64’ on
- a 32 bit machine this function is actually available under the name
- ‘pread’ and so transparently replaces the 32 bit interface.
- -- Function: ssize_t write (int FILEDES, const void *BUFFER, size_t
- SIZE)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- The ‘write’ function writes up to SIZE bytes from BUFFER to the
- file with descriptor FILEDES. The data in BUFFER is not
- necessarily a character string and a null character is output like
- any other character.
- The return value is the number of bytes actually written. This may
- be SIZE, but can always be smaller. Your program should always
- call ‘write’ in a loop, iterating until all the data is written.
- Once ‘write’ returns, the data is enqueued to be written and can be
- read back right away, but it is not necessarily written out to
- permanent storage immediately. You can use ‘fsync’ when you need
- to be sure your data has been permanently stored before continuing.
- (It is more efficient for the system to batch up consecutive writes
- and do them all at once when convenient. Normally they will always
- be written to disk within a minute or less.) Modern systems
- provide another function ‘fdatasync’ which guarantees integrity
- only for the file data and is therefore faster. You can use the
- ‘O_FSYNC’ open mode to make ‘write’ always store the data to disk
- before returning; *note Operating Modes::.
- In the case of an error, ‘write’ returns -1. The following ‘errno’
- error conditions are defined for this function:
- ‘EAGAIN’
- Normally, ‘write’ blocks until the write operation is
- complete. But if the ‘O_NONBLOCK’ flag is set for the file
- (*note Control Operations::), it returns immediately without
- writing any data and reports this error. An example of a
- situation that might cause the process to block on output is
- writing to a terminal device that supports flow control, where
- output has been suspended by receipt of a STOP character.
- *Compatibility Note:* Most versions of BSD Unix use a
- different error code for this: ‘EWOULDBLOCK’. In the GNU C
- Library, ‘EWOULDBLOCK’ is an alias for ‘EAGAIN’, so it doesn't
- matter which name you use.
- On some systems, writing a large amount of data from a
- character special file can also fail with ‘EAGAIN’ if the
- kernel cannot find enough physical memory to lock down the
- user's pages. This is limited to devices that transfer with
- direct memory access into the user's memory, which means it
- does not include terminals, since they always use separate
- buffers inside the kernel. This problem does not arise on
- GNU/Hurd systems.
- ‘EBADF’
- The FILEDES argument is not a valid file descriptor, or is not
- open for writing.
- ‘EFBIG’
- The size of the file would become larger than the
- implementation can support.
- ‘EINTR’
- The ‘write’ operation was interrupted by a signal while it was
- blocked waiting for completion. A signal will not necessarily
- cause ‘write’ to return ‘EINTR’; it may instead result in a
- successful ‘write’ which writes fewer bytes than requested.
- *Note Interrupted Primitives::.
- ‘EIO’
- For many devices, and for disk files, this error code
- indicates a hardware error.
- ‘ENOSPC’
- The device containing the file is full.
- ‘EPIPE’
- This error is returned when you try to write to a pipe or FIFO
- that isn't open for reading by any process. When this
- happens, a ‘SIGPIPE’ signal is also sent to the process; see
- *note Signal Handling::.
- ‘EINVAL’
- In some systems, when writing to a character or block device,
- position and size offsets must be aligned to a particular
- block size. This error indicates that the offsets were not
- properly aligned.
- Unless you have arranged to prevent ‘EINTR’ failures, you should
- check ‘errno’ after each failing call to ‘write’, and if the error
- was ‘EINTR’, you should simply repeat the call. *Note Interrupted
- Primitives::. The easy way to do this is with the macro
- ‘TEMP_FAILURE_RETRY’, as follows:
- nbytes = TEMP_FAILURE_RETRY (write (desc, buffer, count));
- Please note that there is no function named ‘write64’. This is not
- necessary since this function does not directly modify or handle
- the possibly wide file offset. Since the kernel handles this state
- internally the ‘write’ function can be used for all cases.
- This function is a cancellation point in multi-threaded programs.
- This is a problem if the thread allocates some resources (like
- memory, file descriptors, semaphores or whatever) at the time
- ‘write’ is called. If the thread gets canceled these resources
- stay allocated until the program ends. To avoid this, calls to
- ‘write’ should be protected using cancellation handlers.
- The ‘write’ function is the underlying primitive for all of the
- functions that write to streams, such as ‘fputc’.
- -- Function: ssize_t pwrite (int FILEDES, const void *BUFFER, size_t
- SIZE, off_t OFFSET)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- The ‘pwrite’ function is similar to the ‘write’ function. The
- first three arguments are identical, and the return values and
- error codes also correspond.
- The difference is the fourth argument and its handling. The data
- block is not written to the current position of the file descriptor
- ‘filedes’. Instead the data is written to the file starting at
- position OFFSET. The position of the file descriptor itself is not
- affected by the operation. The value is the same as before the
- call.
- However, on Linux, if a file is opened with ‘O_APPEND’, ‘pwrite’
- appends data to the end of the file, regardless of the value of
- ‘offset’.
- When the source file is compiled with ‘_FILE_OFFSET_BITS == 64’ the
- ‘pwrite’ function is in fact ‘pwrite64’ and the type ‘off_t’ has 64
- bits, which makes it possible to handle files up to 2^63 bytes in
- length.
- The return value of ‘pwrite’ describes the number of written bytes.
- In the error case it returns -1 like ‘write’ does and the error
- codes are also the same, with these additions:
- ‘EINVAL’
- The value given for OFFSET is negative and therefore illegal.
- ‘ESPIPE’
- The file descriptor FILEDES is associated with a pipe or a
- FIFO and this device does not allow positioning of the file
- pointer.
- The function is an extension defined in the Unix Single
- Specification version 2.
- -- Function: ssize_t pwrite64 (int FILEDES, const void *BUFFER, size_t
- SIZE, off64_t OFFSET)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function is similar to the ‘pwrite’ function. The difference
- is that the OFFSET parameter is of type ‘off64_t’ instead of
- ‘off_t’ which makes it possible on 32 bit machines to address files
- larger than 2^31 bytes and up to 2^63 bytes. The file descriptor
- ‘filedes’ must be opened using ‘open64’ since otherwise the large
- offsets possible with ‘off64_t’ will lead to errors with a
- descriptor in small file mode.
- When the source file is compiled using ‘_FILE_OFFSET_BITS == 64’ on
- a 32 bit machine this function is actually available under the name
- ‘pwrite’ and so transparently replaces the 32 bit interface.
- File: libc.info, Node: File Position Primitive, Next: Descriptors and Streams, Prev: I/O Primitives, Up: Low-Level I/O
- 13.3 Setting the File Position of a Descriptor
- ==============================================
- Just as you can set the file position of a stream with ‘fseek’, you can
- set the file position of a descriptor with ‘lseek’. This specifies the
- position in the file for the next ‘read’ or ‘write’ operation. *Note
- File Positioning::, for more information on the file position and what
- it means.
- To read the current file position value from a descriptor, use ‘lseek
- (DESC, 0, SEEK_CUR)’.
- -- Function: off_t lseek (int FILEDES, off_t OFFSET, int WHENCE)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- The ‘lseek’ function is used to change the file position of the
- file with descriptor FILEDES.
- The WHENCE argument specifies how the OFFSET should be interpreted,
- in the same way as for the ‘fseek’ function, and it must be one of
- the symbolic constants ‘SEEK_SET’, ‘SEEK_CUR’, or ‘SEEK_END’.
- ‘SEEK_SET’
- Specifies that OFFSET is a count of characters from the
- beginning of the file.
- ‘SEEK_CUR’
- Specifies that OFFSET is a count of characters from the
- current file position. This count may be positive or
- negative.
- ‘SEEK_END’
- Specifies that OFFSET is a count of characters from the end of
- the file. A negative count specifies a position within the
- current extent of the file; a positive count specifies a
- position past the current end. If you set the position past
- the current end, and actually write data, you will extend the
- file with zeros up to that position.
- The return value from ‘lseek’ is normally the resulting file
- position, measured in bytes from the beginning of the file. You
- can use this feature together with ‘SEEK_CUR’ to read the current
- file position.
- If you want to append to the file, setting the file position to the
- current end of file with ‘SEEK_END’ is not sufficient. Another
- process may write more data after you seek but before you write,
- extending the file so the position you write onto clobbers their
- data. Instead, use the ‘O_APPEND’ operating mode; *note Operating
- Modes::.
- You can set the file position past the current end of the file.
- This does not by itself make the file longer; ‘lseek’ never changes
- the file. But subsequent output at that position will extend the
- file. Characters between the previous end of file and the new
- position are filled with zeros. Extending the file in this way can
- create a "hole": the blocks of zeros are not actually allocated on
- disk, so the file takes up less space than it appears to; it is
- then called a "sparse file".
- If the file position cannot be changed, or the operation is in some
- way invalid, ‘lseek’ returns a value of -1. The following ‘errno’
- error conditions are defined for this function:
- ‘EBADF’
- The FILEDES is not a valid file descriptor.
- ‘EINVAL’
- The WHENCE argument value is not valid, or the resulting file
- offset is not valid. A file offset is invalid.
- ‘ESPIPE’
- The FILEDES corresponds to an object that cannot be
- positioned, such as a pipe, FIFO or terminal device. (POSIX.1
- specifies this error only for pipes and FIFOs, but on GNU
- systems, you always get ‘ESPIPE’ if the object is not
- seekable.)
- When the source file is compiled with ‘_FILE_OFFSET_BITS == 64’ the
- ‘lseek’ function is in fact ‘lseek64’ and the type ‘off_t’ has 64
- bits which makes it possible to handle files up to 2^63 bytes in
- length.
- This function is a cancellation point in multi-threaded programs.
- This is a problem if the thread allocates some resources (like
- memory, file descriptors, semaphores or whatever) at the time
- ‘lseek’ is called. If the thread gets canceled these resources
- stay allocated until the program ends. To avoid this calls to
- ‘lseek’ should be protected using cancellation handlers.
- The ‘lseek’ function is the underlying primitive for the ‘fseek’,
- ‘fseeko’, ‘ftell’, ‘ftello’ and ‘rewind’ functions, which operate
- on streams instead of file descriptors.
- -- Function: off64_t lseek64 (int FILEDES, off64_t OFFSET, int WHENCE)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function is similar to the ‘lseek’ function. The difference
- is that the OFFSET parameter is of type ‘off64_t’ instead of
- ‘off_t’ which makes it possible on 32 bit machines to address files
- larger than 2^31 bytes and up to 2^63 bytes. The file descriptor
- ‘filedes’ must be opened using ‘open64’ since otherwise the large
- offsets possible with ‘off64_t’ will lead to errors with a
- descriptor in small file mode.
- When the source file is compiled with ‘_FILE_OFFSET_BITS == 64’ on
- a 32 bits machine this function is actually available under the
- name ‘lseek’ and so transparently replaces the 32 bit interface.
- You can have multiple descriptors for the same file if you open the
- file more than once, or if you duplicate a descriptor with ‘dup’.
- Descriptors that come from separate calls to ‘open’ have independent
- file positions; using ‘lseek’ on one descriptor has no effect on the
- other. For example,
- {
- int d1, d2;
- char buf[4];
- d1 = open ("foo", O_RDONLY);
- d2 = open ("foo", O_RDONLY);
- lseek (d1, 1024, SEEK_SET);
- read (d2, buf, 4);
- }
- will read the first four characters of the file ‘foo’. (The
- error-checking code necessary for a real program has been omitted here
- for brevity.)
- By contrast, descriptors made by duplication share a common file
- position with the original descriptor that was duplicated. Anything
- which alters the file position of one of the duplicates, including
- reading or writing data, affects all of them alike. Thus, for example,
- {
- int d1, d2, d3;
- char buf1[4], buf2[4];
- d1 = open ("foo", O_RDONLY);
- d2 = dup (d1);
- d3 = dup (d2);
- lseek (d3, 1024, SEEK_SET);
- read (d1, buf1, 4);
- read (d2, buf2, 4);
- }
- will read four characters starting with the 1024'th character of ‘foo’,
- and then four more characters starting with the 1028'th character.
- -- Data Type: off_t
- This is a signed integer type used to represent file sizes. In the
- GNU C Library, this type is no narrower than ‘int’.
- If the source is compiled with ‘_FILE_OFFSET_BITS == 64’ this type
- is transparently replaced by ‘off64_t’.
- -- Data Type: off64_t
- This type is used similar to ‘off_t’. The difference is that even
- on 32 bit machines, where the ‘off_t’ type would have 32 bits,
- ‘off64_t’ has 64 bits and so is able to address files up to 2^63
- bytes in length.
- When compiling with ‘_FILE_OFFSET_BITS == 64’ this type is
- available under the name ‘off_t’.
- These aliases for the ‘SEEK_...’ constants exist for the sake of
- compatibility with older BSD systems. They are defined in two different
- header files: ‘fcntl.h’ and ‘sys/file.h’.
- ‘L_SET’
- An alias for ‘SEEK_SET’.
- ‘L_INCR’
- An alias for ‘SEEK_CUR’.
- ‘L_XTND’
- An alias for ‘SEEK_END’.
- File: libc.info, Node: Descriptors and Streams, Next: Stream/Descriptor Precautions, Prev: File Position Primitive, Up: Low-Level I/O
- 13.4 Descriptors and Streams
- ============================
- Given an open file descriptor, you can create a stream for it with the
- ‘fdopen’ function. You can get the underlying file descriptor for an
- existing stream with the ‘fileno’ function. These functions are
- declared in the header file ‘stdio.h’.
- -- Function: FILE * fdopen (int FILEDES, const char *OPENTYPE)
- Preliminary: | MT-Safe | AS-Unsafe heap lock | AC-Unsafe mem lock |
- *Note POSIX Safety Concepts::.
- The ‘fdopen’ function returns a new stream for the file descriptor
- FILEDES.
- The OPENTYPE argument is interpreted in the same way as for the
- ‘fopen’ function (*note Opening Streams::), except that the ‘b’
- option is not permitted; this is because GNU systems make no
- distinction between text and binary files. Also, ‘"w"’ and ‘"w+"’
- do not cause truncation of the file; these have an effect only when
- opening a file, and in this case the file has already been opened.
- You must make sure that the OPENTYPE argument matches the actual
- mode of the open file descriptor.
- The return value is the new stream. If the stream cannot be
- created (for example, if the modes for the file indicated by the
- file descriptor do not permit the access specified by the OPENTYPE
- argument), a null pointer is returned instead.
- In some other systems, ‘fdopen’ may fail to detect that the modes
- for file descriptors do not permit the access specified by
- ‘opentype’. The GNU C Library always checks for this.
- For an example showing the use of the ‘fdopen’ function, see *note
- Creating a Pipe::.
- -- Function: int fileno (FILE *STREAM)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function returns the file descriptor associated with the
- stream STREAM. If an error is detected (for example, if the STREAM
- is not valid) or if STREAM does not do I/O to a file, ‘fileno’
- returns -1.
- -- Function: int fileno_unlocked (FILE *STREAM)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- The ‘fileno_unlocked’ function is equivalent to the ‘fileno’
- function except that it does not implicitly lock the stream if the
- state is ‘FSETLOCKING_INTERNAL’.
- This function is a GNU extension.
- There are also symbolic constants defined in ‘unistd.h’ for the file
- descriptors belonging to the standard streams ‘stdin’, ‘stdout’, and
- ‘stderr’; see *note Standard Streams::.
- ‘STDIN_FILENO’
- This macro has value ‘0’, which is the file descriptor for standard
- input.
- ‘STDOUT_FILENO’
- This macro has value ‘1’, which is the file descriptor for standard
- output.
- ‘STDERR_FILENO’
- This macro has value ‘2’, which is the file descriptor for standard
- error output.
- File: libc.info, Node: Stream/Descriptor Precautions, Next: Scatter-Gather, Prev: Descriptors and Streams, Up: Low-Level I/O
- 13.5 Dangers of Mixing Streams and Descriptors
- ==============================================
- You can have multiple file descriptors and streams (let's call both
- streams and descriptors "channels" for short) connected to the same
- file, but you must take care to avoid confusion between channels. There
- are two cases to consider: “linked” channels that share a single file
- position value, and “independent” channels that have their own file
- positions.
- It's best to use just one channel in your program for actual data
- transfer to any given file, except when all the access is for input.
- For example, if you open a pipe (something you can only do at the file
- descriptor level), either do all I/O with the descriptor, or construct a
- stream from the descriptor with ‘fdopen’ and then do all I/O with the
- stream.
- * Menu:
- * Linked Channels:: Dealing with channels sharing a file position.
- * Independent Channels:: Dealing with separately opened, unlinked channels.
- * Cleaning Streams:: Cleaning a stream makes it safe to use
- another channel.
- File: libc.info, Node: Linked Channels, Next: Independent Channels, Up: Stream/Descriptor Precautions
- 13.5.1 Linked Channels
- ----------------------
- Channels that come from a single opening share the same file position;
- we call them “linked” channels. Linked channels result when you make a
- stream from a descriptor using ‘fdopen’, when you get a descriptor from
- a stream with ‘fileno’, when you copy a descriptor with ‘dup’ or ‘dup2’,
- and when descriptors are inherited during ‘fork’. For files that don't
- support random access, such as terminals and pipes, _all_ channels are
- effectively linked. On random-access files, all append-type output
- streams are effectively linked to each other.
- If you have been using a stream for I/O (or have just opened the
- stream), and you want to do I/O using another channel (either a stream
- or a descriptor) that is linked to it, you must first “clean up” the
- stream that you have been using. *Note Cleaning Streams::.
- Terminating a process, or executing a new program in the process,
- destroys all the streams in the process. If descriptors linked to these
- streams persist in other processes, their file positions become
- undefined as a result. To prevent this, you must clean up the streams
- before destroying them.
- In addition to cleaning up a stream before doing I/O using another
- linked channel, additional precautions are needed to ensure a
- well-defined file position indicator in some cases. If both the
- following conditions hold, you must set the file position indicator on
- the new channel (a stream) using a function such as ‘fseek’.
- • The new linked channel is a stream that was previously active.
- • The file position indicator was previously set on that channel
- (while it was previously active) with a function such as ‘fseek’.
- POSIX requires such precautions in more cases: if either the old or
- the new linked channel is a stream (whether or not previously active)
- and the file position indicator was previously set on any channel linked
- to those channels with a function such as ‘fseek’ or ‘lseek’.
- File: libc.info, Node: Independent Channels, Next: Cleaning Streams, Prev: Linked Channels, Up: Stream/Descriptor Precautions
- 13.5.2 Independent Channels
- ---------------------------
- When you open channels (streams or descriptors) separately on a seekable
- file, each channel has its own file position. These are called
- “independent channels”.
- The system handles each channel independently. Most of the time,
- this is quite predictable and natural (especially for input): each
- channel can read or write sequentially at its own place in the file.
- However, if some of the channels are streams, you must take these
- precautions:
- • You should clean an output stream after use, before doing anything
- else that might read or write from the same part of the file.
- • You should clean an input stream before reading data that may have
- been modified using an independent channel. Otherwise, you might
- read obsolete data that had been in the stream's buffer.
- If you do output to one channel at the end of the file, this will
- certainly leave the other independent channels positioned somewhere
- before the new end. You cannot reliably set their file positions to the
- new end of file before writing, because the file can always be extended
- by another process between when you set the file position and when you
- write the data. Instead, use an append-type descriptor or stream; they
- always output at the current end of the file. In order to make the
- end-of-file position accurate, you must clean the output channel you
- were using, if it is a stream.
- It's impossible for two channels to have separate file pointers for a
- file that doesn't support random access. Thus, channels for reading or
- writing such files are always linked, never independent. Append-type
- channels are also always linked. For these channels, follow the rules
- for linked channels; see *note Linked Channels::.
- File: libc.info, Node: Cleaning Streams, Prev: Independent Channels, Up: Stream/Descriptor Precautions
- 13.5.3 Cleaning Streams
- -----------------------
- You can use ‘fflush’ to clean a stream in most cases.
- You can skip the ‘fflush’ if you know the stream is already clean. A
- stream is clean whenever its buffer is empty. For example, an
- unbuffered stream is always clean. An input stream that is at
- end-of-file is clean. A line-buffered stream is clean when the last
- character output was a newline. However, a just-opened input stream
- might not be clean, as its input buffer might not be empty.
- There is one case in which cleaning a stream is impossible on most
- systems. This is when the stream is doing input from a file that is not
- random-access. Such streams typically read ahead, and when the file is
- not random access, there is no way to give back the excess data already
- read. When an input stream reads from a random-access file, ‘fflush’
- does clean the stream, but leaves the file pointer at an unpredictable
- place; you must set the file pointer before doing any further I/O.
- Closing an output-only stream also does ‘fflush’, so this is a valid
- way of cleaning an output stream.
- You need not clean a stream before using its descriptor for control
- operations such as setting terminal modes; these operations don't affect
- the file position and are not affected by it. You can use any
- descriptor for these operations, and all channels are affected
- simultaneously. However, text already "output" to a stream but still
- buffered by the stream will be subject to the new terminal modes when
- subsequently flushed. To make sure "past" output is covered by the
- terminal settings that were in effect at the time, flush the output
- streams for that terminal before setting the modes. *Note Terminal
- Modes::.
- File: libc.info, Node: Scatter-Gather, Next: Copying File Data, Prev: Stream/Descriptor Precautions, Up: Low-Level I/O
- 13.6 Fast Scatter-Gather I/O
- ============================
- Some applications may need to read or write data to multiple buffers,
- which are separated in memory. Although this can be done easily enough
- with multiple calls to ‘read’ and ‘write’, it is inefficient because
- there is overhead associated with each kernel call.
- Instead, many platforms provide special high-speed primitives to
- perform these “scatter-gather” operations in a single kernel call. The
- GNU C Library will provide an emulation on any system that lacks these
- primitives, so they are not a portability threat. They are defined in
- ‘sys/uio.h’.
- These functions are controlled with arrays of ‘iovec’ structures,
- which describe the location and size of each buffer.
- -- Data Type: struct iovec
- The ‘iovec’ structure describes a buffer. It contains two fields:
- ‘void *iov_base’
- Contains the address of a buffer.
- ‘size_t iov_len’
- Contains the length of the buffer.
- -- Function: ssize_t readv (int FILEDES, const struct iovec *VECTOR,
- int COUNT)
- Preliminary: | MT-Safe | AS-Unsafe heap | AC-Unsafe mem | *Note
- POSIX Safety Concepts::.
- The ‘readv’ function reads data from FILEDES and scatters it into
- the buffers described in VECTOR, which is taken to be COUNT
- structures long. As each buffer is filled, data is sent to the
- next.
- Note that ‘readv’ is not guaranteed to fill all the buffers. It
- may stop at any point, for the same reasons ‘read’ would.
- The return value is a count of bytes (_not_ buffers) read, 0
- indicating end-of-file, or -1 indicating an error. The possible
- errors are the same as in ‘read’.
- -- Function: ssize_t writev (int FILEDES, const struct iovec *VECTOR,
- int COUNT)
- Preliminary: | MT-Safe | AS-Unsafe heap | AC-Unsafe mem | *Note
- POSIX Safety Concepts::.
- The ‘writev’ function gathers data from the buffers described in
- VECTOR, which is taken to be COUNT structures long, and writes them
- to ‘filedes’. As each buffer is written, it moves on to the next.
- Like ‘readv’, ‘writev’ may stop midstream under the same conditions
- ‘write’ would.
- The return value is a count of bytes written, or -1 indicating an
- error. The possible errors are the same as in ‘write’.
- -- Function: ssize_t preadv (int FD, const struct iovec *IOV, int
- IOVCNT, off_t OFFSET)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function is similar to the ‘readv’ function, with the
- difference it adds an extra OFFSET parameter of type ‘off_t’
- similar to ‘pread’. The data is read from the file starting at
- position OFFSET. The position of the file descriptor itself is not
- affected by the operation. The value is the same as before the
- call.
- When the source file is compiled with ‘_FILE_OFFSET_BITS == 64’ the
- ‘preadv’ function is in fact ‘preadv64’ and the type ‘off_t’ has 64
- bits, which makes it possible to handle files up to 2^63 bytes in
- length.
- The return value is a count of bytes (_not_ buffers) read, 0
- indicating end-of-file, or -1 indicating an error. The possible
- errors are the same as in ‘readv’ and ‘pread’.
- -- Function: ssize_t preadv64 (int FD, const struct iovec *IOV, int
- IOVCNT, off64_t OFFSET)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function is similar to the ‘preadv’ function with the
- difference is that the OFFSET parameter is of type ‘off64_t’
- instead of ‘off_t’. It makes it possible on 32 bit machines to
- address files larger than 2^31 bytes and up to 2^63 bytes. The
- file descriptor ‘filedes’ must be opened using ‘open64’ since
- otherwise the large offsets possible with ‘off64_t’ will lead to
- errors with a descriptor in small file mode.
- When the source file is compiled using ‘_FILE_OFFSET_BITS == 64’ on
- a 32 bit machine this function is actually available under the name
- ‘preadv’ and so transparently replaces the 32 bit interface.
- -- Function: ssize_t pwritev (int FD, const struct iovec *IOV, int
- IOVCNT, off_t OFFSET)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function is similar to the ‘writev’ function, with the
- difference it adds an extra OFFSET parameter of type ‘off_t’
- similar to ‘pwrite’. The data is written to the file starting at
- position OFFSET. The position of the file descriptor itself is not
- affected by the operation. The value is the same as before the
- call.
- However, on Linux, if a file is opened with ‘O_APPEND’, ‘pwrite’
- appends data to the end of the file, regardless of the value of
- ‘offset’.
- When the source file is compiled with ‘_FILE_OFFSET_BITS == 64’ the
- ‘pwritev’ function is in fact ‘pwritev64’ and the type ‘off_t’ has
- 64 bits, which makes it possible to handle files up to 2^63 bytes
- in length.
- The return value is a count of bytes (_not_ buffers) written, 0
- indicating end-of-file, or -1 indicating an error. The possible
- errors are the same as in ‘writev’ and ‘pwrite’.
- -- Function: ssize_t pwritev64 (int FD, const struct iovec *IOV, int
- IOVCNT, off64_t OFFSET)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function is similar to the ‘pwritev’ function with the
- difference is that the OFFSET parameter is of type ‘off64_t’
- instead of ‘off_t’. It makes it possible on 32 bit machines to
- address files larger than 2^31 bytes and up to 2^63 bytes. The
- file descriptor ‘filedes’ must be opened using ‘open64’ since
- otherwise the large offsets possible with ‘off64_t’ will lead to
- errors with a descriptor in small file mode.
- When the source file is compiled using ‘_FILE_OFFSET_BITS == 64’ on
- a 32 bit machine this function is actually available under the name
- ‘pwritev’ and so transparently replaces the 32 bit interface.
- -- Function: ssize_t preadv2 (int FD, const struct iovec *IOV, int
- IOVCNT, off_t OFFSET, int FLAGS)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function is similar to the ‘preadv’ function, with the
- difference it adds an extra FLAGS parameter of type ‘int’.
- Additionally, if OFFSET is -1, the current file position is used
- and updated (like the ‘readv’ function).
- The supported FLAGS are dependent of the underlying system. For
- Linux it supports:
- ‘RWF_HIPRI’
- High priority request. This adds a flag that tells the file
- system that this is a high priority request for which it is
- worth to poll the hardware. The flag is purely advisory and
- can be ignored if not supported. The FD must be opened using
- ‘O_DIRECT’.
- ‘RWF_DSYNC’
- Per-IO synchronization as if the file was opened with
- ‘O_DSYNC’ flag.
- ‘RWF_SYNC’
- Per-IO synchronization as if the file was opened with ‘O_SYNC’
- flag.
- ‘RWF_NOWAIT’
- Use nonblocking mode for this operation; that is, this call to
- ‘preadv2’ will fail and set ‘errno’ to ‘EAGAIN’ if the
- operation would block.
- ‘RWF_APPEND’
- Per-IO synchronization as if the file was opened with
- ‘O_APPEND’ flag.
- ‘RWF_NOAPPEND’
- This flag allows an offset to be honored, even if the file was
- opened with ‘O_APPEND’ flag.
- ‘RWF_ATOMIC’
- Indicate that the write is to be issued with torn-write
- prevention. The input buffer should follow some contraints:
- the total length should be power-of-2 in size and also sizes
- between ‘atomic_write_unit_min’ and ‘atomic_write_unit_max’,
- the ‘struct iovec’ count should be up to
- ‘atomic_write_segments_max’, and the offset should be
- naturally-aligned with regard to total write length.
- The ‘atomic_*’ values can be obtained with ‘statx’ along with
- ‘STATX_WRITE_ATOMIC’ flag.
- ‘RWF_DONTCACHE’
- Use uncached buffered IO. If the file system does not support
- it, the call will fail and set ‘errno’ to ‘EOPNOTSUPP’.
- This is a Linux-specific extension.
- When the source file is compiled with ‘_FILE_OFFSET_BITS == 64’ the
- ‘preadv2’ function is in fact ‘preadv64v2’ and the type ‘off_t’ has
- 64 bits, which makes it possible to handle files up to 2^63 bytes
- in length.
- The return value is a count of bytes (_not_ buffers) read, 0
- indicating end-of-file, or -1 indicating an error. The possible
- errors are the same as in ‘preadv’ with the addition of:
- ‘EOPNOTSUPP’
- An unsupported FLAGS was used.
- -- Function: ssize_t preadv64v2 (int FD, const struct iovec *IOV, int
- IOVCNT, off64_t OFFSET, int FLAGS)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function is similar to the ‘preadv2’ function with the
- difference is that the OFFSET parameter is of type ‘off64_t’
- instead of ‘off_t’. It makes it possible on 32 bit machines to
- address files larger than 2^31 bytes and up to 2^63 bytes. The
- file descriptor ‘filedes’ must be opened using ‘open64’ since
- otherwise the large offsets possible with ‘off64_t’ will lead to
- errors with a descriptor in small file mode.
- When the source file is compiled using ‘_FILE_OFFSET_BITS == 64’ on
- a 32 bit machine this function is actually available under the name
- ‘preadv2’ and so transparently replaces the 32 bit interface.
- -- Function: ssize_t pwritev2 (int FD, const struct iovec *IOV, int
- IOVCNT, off_t OFFSET, int FLAGS)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function is similar to the ‘pwritev’ function, with the
- difference it adds an extra FLAGS parameter of type ‘int’.
- Additionally, if OFFSET is -1, the current file position should is
- used and updated (like the ‘writev’ function).
- The supported FLAGS are dependent of the underlying system. For
- Linux, the supported flags are the same as those for ‘preadv2’.
- When the source file is compiled with ‘_FILE_OFFSET_BITS == 64’ the
- ‘pwritev2’ function is in fact ‘pwritev64v2’ and the type ‘off_t’
- has 64 bits, which makes it possible to handle files up to 2^63
- bytes in length.
- The return value is a count of bytes (_not_ buffers) write, 0
- indicating end-of-file, or -1 indicating an error. The possible
- errors are the same as in ‘preadv2’.
- -- Function: ssize_t pwritev64v2 (int FD, const struct iovec *IOV, int
- IOVCNT, off64_t OFFSET, int FLAGS)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function is similar to the ‘pwritev2’ function with the
- difference is that the OFFSET parameter is of type ‘off64_t’
- instead of ‘off_t’. It makes it possible on 32 bit machines to
- address files larger than 2^31 bytes and up to 2^63 bytes. The
- file descriptor ‘filedes’ must be opened using ‘open64’ since
- otherwise the large offsets possible with ‘off64_t’ will lead to
- errors with a descriptor in small file mode.
- When the source file is compiled using ‘_FILE_OFFSET_BITS == 64’ on
- a 32 bit machine this function is actually available under the name
- ‘pwritev2’ and so transparently replaces the 32 bit interface.
- File: libc.info, Node: Copying File Data, Next: Memory-mapped I/O, Prev: Scatter-Gather, Up: Low-Level I/O
- 13.7 Copying data between two files
- ===================================
- A special function is provided to copy data between two files on the
- same file system. The system can optimize such copy operations. This
- is particularly important on network file systems, where the data would
- otherwise have to be transferred twice over the network.
- Note that this function only copies file data, but not metadata such
- as file permissions or extended attributes.
- -- Function: ssize_t copy_file_range (int INPUTFD, off64_t *INPUTPOS,
- int OUTPUTFD, off64_t *OUTPUTPOS, ssize_t LENGTH, unsigned int
- FLAGS)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function copies up to LENGTH bytes from the file descriptor
- INPUTFD to the file descriptor OUTPUTFD.
- The function can operate on both the current file position (like
- ‘read’ and ‘write’) and an explicit offset (like ‘pread’ and
- ‘pwrite’). If the INPUTPOS pointer is null, the file position of
- INPUTFD is used as the starting point of the copy operation, and
- the file position is advanced during it. If INPUTPOS is not null,
- then ‘*INPUTPOS’ is used as the starting point of the copy
- operation, and ‘*INPUTPOS’ is incremented by the number of copied
- bytes, but the file position remains unchanged. Similar rules
- apply to OUTPUTFD and OUTPUTPOS for the output file position.
- The FLAGS argument is currently reserved and must be zero.
- The ‘copy_file_range’ function returns the number of bytes copied.
- This can be less than the specified LENGTH in case the input file
- contains fewer remaining bytes than LENGTH, or if a read or write
- failure occurs. The return value is zero if the end of the input
- file is encountered immediately.
- If no bytes can be copied, to report an error, ‘copy_file_range’
- returns the value -1 and sets ‘errno’. The table below lists some
- of the error conditions for this function.
- ‘ENOSYS’
- The kernel does not implement the required functionality.
- ‘EISDIR’
- At least one of the descriptors INPUTFD or OUTPUTFD refers to
- a directory.
- ‘EINVAL’
- At least one of the descriptors INPUTFD or OUTPUTFD refers to
- a non-regular, non-directory file (such as a socket or a
- FIFO).
- The input or output positions before are after the copy
- operations are outside of an implementation-defined limit.
- The FLAGS argument is not zero.
- ‘EFBIG’
- The new file size would exceed the process file size limit.
- *Note Limits on Resources::.
- The input or output positions before are after the copy
- operations are outside of an implementation-defined limit.
- This can happen if the file was not opened with large file
- support (LFS) on 32-bit machines, and the copy operation would
- create a file which is larger than what ‘off_t’ could
- represent.
- ‘EBADF’
- The argument INPUTFD is not a valid file descriptor open for
- reading.
- The argument OUTPUTFD is not a valid file descriptor open for
- writing, or OUTPUTFD has been opened with ‘O_APPEND’.
- In addition, ‘copy_file_range’ can fail with the error codes which
- are used by ‘read’, ‘pread’, ‘write’, and ‘pwrite’.
- The ‘copy_file_range’ function is a cancellation point. In case of
- cancellation, the input location (the file position or the value at
- ‘*INPUTPOS’) is indeterminate.
- File: libc.info, Node: Memory-mapped I/O, Next: Waiting for I/O, Prev: Copying File Data, Up: Low-Level I/O
- 13.8 Memory-mapped I/O
- ======================
- On modern operating systems, it is possible to “mmap” (pronounced
- "em-map") a file to a region of memory. When this is done, the file can
- be accessed just like an array in the program.
- This is more efficient than ‘read’ or ‘write’, as only the regions of
- the file that a program actually accesses are loaded. Accesses to
- not-yet-loaded parts of the mmapped region are handled in the same way
- as swapped out pages.
- Since mmapped pages can be stored back to their file when physical
- memory is low, it is possible to mmap files orders of magnitude larger
- than both the physical memory _and_ swap space. The only limit is
- address space. The theoretical limit is 4GB on a 32-bit machine -
- however, the actual limit will be smaller since some areas will be
- reserved for other purposes. If the LFS interface is used the file size
- on 32-bit systems is not limited to 2GB (offsets are signed which
- reduces the addressable area of 4GB by half); the full 64-bit are
- available.
- Memory mapping only works on entire pages of memory. Thus, addresses
- for mapping must be page-aligned, and length values will be rounded up.
- To determine the default size of a page the machine uses one should use:
- size_t page_size = (size_t) sysconf (_SC_PAGESIZE);
- On some systems, mappings can use larger page sizes for certain
- files, and applications can request larger page sizes for anonymous
- mappings as well (see the ‘MAP_HUGETLB’ flag below).
- The following functions are declared in ‘sys/mman.h’:
- -- Function: void * mmap (void *ADDRESS, size_t LENGTH, int PROTECT,
- int FLAGS, int FILEDES, off_t OFFSET)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- The ‘mmap’ function creates a new mapping, connected to bytes
- (OFFSET) to (OFFSET + LENGTH - 1) in the file open on FILEDES. A
- new reference for the file specified by FILEDES is created, which
- is not removed by closing the file.
- ADDRESS gives a preferred starting address for the mapping. ‘NULL’
- expresses no preference. Any previous mapping at that address is
- automatically removed. The address you give may still be changed,
- unless you use the ‘MAP_FIXED’ flag.
- PROTECT contains flags that control what kind of access is
- permitted. They include ‘PROT_READ’, ‘PROT_WRITE’, and
- ‘PROT_EXEC’. The special flag ‘PROT_NONE’ reserves a region of
- address space for future use. The ‘mprotect’ function can be used
- to change the protection flags. *Note Memory Protection::.
- The FLAGS parameter contains flags that control the nature of the
- map. One of ‘MAP_SHARED’, ‘MAP_SHARED_VALIDATE’, or ‘MAP_PRIVATE’
- must be specified. Additional flags may be bitwise OR'd to further
- define the mapping.
- Note that, aside from ‘MAP_PRIVATE’ and ‘MAP_SHARED’, not all flags
- are supported on all versions of all operating systems. Consult
- the kernel-specific documentation for details. The flags include:
- ‘MAP_PRIVATE’
- This specifies that writes to the region should never be
- written back to the attached file. Instead, a copy is made
- for the process, and the region will be swapped normally if
- memory runs low. No other process will see the changes.
- Since private mappings effectively revert to ordinary memory
- when written to, you must have enough virtual memory for a
- copy of the entire mmapped region if you use this mode with
- ‘PROT_WRITE’.
- ‘MAP_SHARED’
- This specifies that writes to the region will be written back
- to the file. Changes made will be shared immediately with
- other processes mmaping the same file.
- Note that actual writing may take place at any time. You need
- to use ‘msync’, described below, if it is important that other
- processes using conventional I/O get a consistent view of the
- file.
- ‘MAP_SHARED_VALIDATE’
- Similar to ‘MAP_SHARED’ except that additional flags will be
- validated by the kernel, and the call will fail if an
- unrecognized flag is provided. With ‘MAP_SHARED’ using a flag
- on a kernel that doesn't support it causes the flag to be
- ignored. ‘MAP_SHARED_VALIDATE’ should be used when the
- behavior of all flags is required.
- ‘MAP_FIXED’
- This forces the system to use the exact mapping address
- specified in ADDRESS and fail if it can't. Note that if the
- new mapping would overlap an existing mapping, the overlapping
- portion of the existing map is unmapped.
- ‘MAP_ANONYMOUS’
- ‘MAP_ANON’
- This flag tells the system to create an anonymous mapping, not
- connected to a file. FILEDES and OFFSET are ignored, and the
- region is initialized with zeros.
- Anonymous maps are used as the basic primitive to extend the
- heap on some systems. They are also useful to share data
- between multiple tasks without creating a file.
- On some systems using private anonymous mmaps is more
- efficient than using ‘malloc’ for large blocks. This is not
- an issue with the GNU C Library, as the included ‘malloc’
- automatically uses ‘mmap’ where appropriate.
- ‘MAP_HUGETLB’
- This requests that the system uses an alternative page size
- which is larger than the default page size for the mapping.
- For some workloads, increasing the page size for large
- mappings improves performance because the system needs to
- handle far fewer pages. For other workloads which require
- frequent transfer of pages between storage or different nodes,
- the decreased page granularity may cause performance problems
- due to the increased page size and larger transfers.
- In order to create the mapping, the system needs physically
- contiguous memory of the size of the increased page size. As
- a result, ‘MAP_HUGETLB’ mappings are affected by memory
- fragmentation, and their creation can fail even if plenty of
- memory is available in the system.
- Not all file systems support mappings with an increased page
- size.
- The ‘MAP_HUGETLB’ flag is specific to Linux.
- ‘MAP_32BIT’
- Require addresses that can be accessed with a signed 32 bit
- pointer, i.e., within the first 2 GiB. Ignored if MAP_FIXED is
- specified.
- ‘MAP_DENYWRITE’
- ‘MAP_EXECUTABLE’
- ‘MAP_FILE’
- Provided for compatibility. Ignored by the Linux kernel.
- ‘MAP_FIXED_NOREPLACE’
- Similar to ‘MAP_FIXED’ except the call will fail with ‘EEXIST’
- if the new mapping would overwrite an existing mapping. To
- test for support for this flag, specify MAP_FIXED_NOREPLACE
- without MAP_FIXED, and (if the call was successful) check the
- actual address returned. If it does not match the address
- passed, then this flag is not supported.
- ‘MAP_GROWSDOWN’
- This flag is used to make stacks, and is typically only needed
- inside the program loader to set up the main stack for the
- running process. The mapping is created according to the
- other flags, except an additional page just prior to the
- mapping is marked as a "guard page". If a write is attempted
- inside this guard page, that page is mapped, the mapping is
- extended, and a new guard page is created. Thus, the mapping
- continues to grow towards lower addresses until it encounters
- some other mapping.
- Note that accessing memory beyond the guard page will not
- trigger this feature. In gcc, use ‘-fstack-clash-protection’
- to ensure the guard page is always touched.
- ‘MAP_LOCKED’
- A hint that requests that mapped pages are locked in memory
- (i.e. not paged out). Note that this is a request and not a
- requirement; use ‘mlock’ if locking is required.
- ‘MAP_POPULATE’
- ‘MAP_NONBLOCK’
- ‘MAP_POPULATE’ is a hint that requests that the kernel
- read-ahead a file-backed mapping, causing pages to be mapped
- before they're needed. ‘MAP_NONBLOCK’ is a hint that requests
- that the kernel _not_ attempt such except for pages are
- already in memory. Note that neither of these hints affects
- future paging activity, use ‘mlock’ if such needs to be
- controlled.
- ‘MAP_NORESERVE’
- Asks the kernel to not reserve physical backing (i.e. space
- in a swap device) for a mapping. This would be useful for,
- for example, a very large but sparsely used mapping which need
- not be limited in total length by available RAM, but with very
- few mapped pages. Note that writes to such a mapping may
- cause a ‘SIGSEGV’ if the system is unable to map a page due to
- lack of resources.
- On Linux, this flag's behavior may be overwridden by
- ‘/proc/sys/vm/overcommit_memory’ as documented in the proc(5)
- man page.
- ‘MAP_STACK’
- Ensures that the resulting mapping is suitable for use as a
- program stack. For example, the use of huge pages might be
- precluded.
- ‘MAP_SYNC’
- This is a special flag for DAX devices, which tells the kernel
- to write dirty metadata out whenever dirty data is written
- out. Unlike most other flags, this one will fail unless
- ‘MAP_SHARED_VALIDATE’ is also given.
- ‘MAP_DROPPABLE’
- Request the page to be never written out to swap, it will be
- zeroed under memory pressure (so kernel can just drop the
- page), it is inherited by fork, it is not counted against
- ‘mlock’ budget, and if there is not enough memory to service a
- page fault there is no fatal error (so no signal is sent).
- The ‘MAP_DROPPABLE’ flag is specific to Linux.
- ‘mmap’ returns the address of the new mapping, or ‘MAP_FAILED’ for
- an error.
- Possible errors include:
- ‘EACCES’
- FILEDES was not open for the type of access specified in
- PROTECT.
- ‘EAGAIN’
- The system has temporarily run out of resources.
- ‘EBADF’
- The FD passed is invalid, and a valid file descriptor is
- required (i.e. MAP_ANONYMOUS was not specified).
- ‘EEXIST’
- ‘MAP_FIXED_NOREPLACE’ was specified and an existing mapping
- was found overlapping the requested address range.
- ‘EINVAL’
- Either ADDRESS was unusable (because it is not a multiple of
- the applicable page size), or inconsistent FLAGS were given.
- If ‘MAP_HUGETLB’ was specified, the file or system does not
- support large page sizes.
- ‘ENODEV’
- This file is of a type that doesn't support mapping, the
- process has exceeded its data space limit, or the map request
- would exceed the process's virtual address space.
- ‘ENOMEM’
- There is not enough memory for the operation, the process is
- out of address space, or there are too many mappings. On
- Linux, the maximum number of mappings can be controlled via
- ‘/proc/sys/vm/max_map_count’ or, if your OS supports it, via
- the ‘vm.max_map_count’ ‘sysctl’ setting.
- ‘ENOEXEC’
- The file is on a filesystem that doesn't support mapping.
- ‘EPERM’
- ‘PROT_EXEC’ was requested but the file is on a filesystem that
- was mounted with execution denied, a file seal prevented the
- mapping, or the caller set MAP_HUDETLB but does not have the
- required priviledges.
- ‘EOVERFLOW’
- Either the offset into the file plus the length of the mapping
- causes internal page counts to overflow, or the offset
- requested exceeds the length of the file.
- -- Function: void * mmap64 (void *ADDRESS, size_t LENGTH, int PROTECT,
- int FLAGS, int FILEDES, off64_t OFFSET)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- The ‘mmap64’ function is equivalent to the ‘mmap’ function but the
- OFFSET parameter is of type ‘off64_t’. On 32-bit systems this
- allows the file associated with the FILEDES descriptor to be larger
- than 2GB. FILEDES must be a descriptor returned from a call to
- ‘open64’ or ‘fopen64’ and ‘freopen64’ where the descriptor is
- retrieved with ‘fileno’.
- When the sources are translated with ‘_FILE_OFFSET_BITS == 64’ this
- function is actually available under the name ‘mmap’. I.e., the
- new, extended API using 64 bit file sizes and offsets transparently
- replaces the old API.
- -- Function: int munmap (void *ADDR, size_t LENGTH)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- ‘munmap’ removes any memory maps from (ADDR) to (ADDR + LENGTH).
- LENGTH should be the length of the mapping.
- It is safe to unmap multiple mappings in one command, or include
- unmapped space in the range. It is also possible to unmap only
- part of an existing mapping. However, only entire pages can be
- removed. If LENGTH is not an even number of pages, it will be
- rounded up.
- It returns 0 for success and -1 for an error.
- One error is possible:
- ‘EINVAL’
- The memory range given was outside the user mmap range or
- wasn't page aligned.
- -- Function: int msync (void *ADDRESS, size_t LENGTH, int FLAGS)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- When using shared mappings, the kernel can write the file at any
- time before the mapping is removed. To be certain data has
- actually been written to the file and will be accessible to
- non-memory-mapped I/O, it is necessary to use this function.
- It operates on the region ADDRESS to (ADDRESS + LENGTH). It may be
- used on part of a mapping or multiple mappings, however the region
- given should not contain any unmapped space.
- FLAGS can contain some options:
- ‘MS_SYNC’
- This flag makes sure the data is actually written _to disk_.
- Normally ‘msync’ only makes sure that accesses to a file with
- conventional I/O reflect the recent changes.
- ‘MS_ASYNC’
- This tells ‘msync’ to begin the synchronization, but not to
- wait for it to complete.
- ‘msync’ returns 0 for success and -1 for error. Errors include:
- ‘EINVAL’
- An invalid region was given, or the FLAGS were invalid.
- ‘EFAULT’
- There is no existing mapping in at least part of the given
- region.
- -- Function: void * mremap (void *ADDRESS, size_t LENGTH, size_t
- NEW_LENGTH, int FLAG, ... /* void *NEW_ADDRESS */)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function can be used to change the size of an existing memory
- area. ADDRESS and LENGTH must cover a region entirely mapped in
- the same ‘mmap’ statement. A new mapping with the same
- characteristics will be returned with the length NEW_LENGTH.
- Possible flags are
- ‘MREMAP_MAYMOVE’
- If it is given in FLAGS, the system may remove the existing
- mapping and create a new one of the desired length in another
- location.
- ‘MREMAP_FIXED’
- If it is given in FLAGS, ‘mremap’ accepts a fifth argument,
- ‘void *new_address’, which specifies a page-aligned address to
- which the mapping must be moved. Any previous mapping at the
- address range specified by NEW_ADDRESS and NEW_SIZE is
- unmapped.
- ‘MREMAP_FIXED’ must be used together with ‘MREMAP_MAYMOVE’.
- ‘MREMAP_DONTUNMAP’
- If it is given in FLAGS, ‘mremap’ accepts a fifth argument,
- ‘void *new_address’, which specifies a page-aligned address.
- Any previous mapping at the address range specified by
- NEW_ADDRESS and NEW_SIZE is unmapped. If NEW_ADDRESS is
- ‘NULL’, the kernel chooses the page-aligned address at which
- to create the mapping. Otherwise, the kernel takes it as a
- hint about where to place the mapping. The mapping at the
- address range specified by OLD_ADDRESS and OLD_SIZE isn't
- unmapped.
- ‘MREMAP_DONTUNMAP’ must be used together with
- ‘MREMAP_MAYMOVE’. OLD_SIZE must be the same as NEW_SIZE.
- This flag bit is Linux-specific.
- The address of the resulting mapping is returned, or ‘MAP_FAILED’.
- Possible error codes include:
- ‘EFAULT’
- There is no existing mapping in at least part of the original
- region, or the region covers two or more distinct mappings.
- ‘EINVAL’
- Any arguments are inappropriate, including unknown FLAGS
- values.
- ‘EAGAIN’
- The region has pages locked, and if extended it would exceed
- the process's resource limit for locked pages. *Note Limits
- on Resources::.
- ‘ENOMEM’
- The region is private writable, and insufficient virtual
- memory is available to extend it. Also, this error will occur
- if ‘MREMAP_MAYMOVE’ is not given and the extension would
- collide with another mapped region.
- This function is only available on a few systems. Except for
- performing optional optimizations one should not rely on this function.
- Not all file descriptors may be mapped. Sockets, pipes, and most
- devices only allow sequential access and do not fit into the mapping
- abstraction. In addition, some regular files may not be mmapable, and
- older kernels may not support mapping at all. Thus, programs using
- ‘mmap’ should have a fallback method to use should it fail. *Note
- (standards)Mmap::.
- -- Function: int madvise (void *ADDR, size_t LENGTH, int ADVICE)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function can be used to provide the system with ADVICE about
- the intended usage patterns of the memory region starting at ADDR
- and extending LENGTH bytes.
- The valid BSD values for ADVICE are:
- ‘MADV_NORMAL’
- The region should receive no further special treatment.
- ‘MADV_RANDOM’
- The region will be accessed via random page references. The
- kernel should page-in the minimal number of pages for each
- page fault.
- ‘MADV_SEQUENTIAL’
- The region will be accessed via sequential page references.
- This may cause the kernel to aggressively read-ahead,
- expecting further sequential references after any page fault
- within this region.
- ‘MADV_WILLNEED’
- The region will be needed. The pages within this region may
- be pre-faulted in by the kernel.
- ‘MADV_DONTNEED’
- The region is no longer needed. The kernel may free these
- pages, causing any changes to the pages to be lost, as well as
- swapped out pages to be discarded.
- ‘MADV_HUGEPAGE’
- Indicate that it is beneficial to increase the page size for
- this mapping. This can improve performance for larger
- mappings because the system needs to handle far fewer pages.
- However, if parts of the mapping are frequently transferred
- between storage or different nodes, performance may suffer
- because individual transfers can become substantially larger
- due to the increased page size.
- This flag is specific to Linux.
- ‘MADV_NOHUGEPAGE’
- Undo the effect of a previous ‘MADV_HUGEPAGE’ advice. This
- flag is specific to Linux.
- The POSIX names are slightly different, but with the same meanings:
- ‘POSIX_MADV_NORMAL’
- This corresponds with BSD's ‘MADV_NORMAL’.
- ‘POSIX_MADV_RANDOM’
- This corresponds with BSD's ‘MADV_RANDOM’.
- ‘POSIX_MADV_SEQUENTIAL’
- This corresponds with BSD's ‘MADV_SEQUENTIAL’.
- ‘POSIX_MADV_WILLNEED’
- This corresponds with BSD's ‘MADV_WILLNEED’.
- ‘POSIX_MADV_DONTNEED’
- This corresponds with BSD's ‘MADV_DONTNEED’.
- ‘madvise’ returns 0 for success and -1 for error. Errors include:
- ‘EINVAL’
- An invalid region was given, or the ADVICE was invalid.
- ‘EFAULT’
- There is no existing mapping in at least part of the given
- region.
- -- Function: int shm_open (const char *NAME, int OFLAG, mode_t MODE)
- Preliminary: | MT-Safe locale | AS-Unsafe init heap lock |
- AC-Unsafe lock mem fd | *Note POSIX Safety Concepts::.
- This function returns a file descriptor that can be used to
- allocate shared memory via mmap. Unrelated processes can use same
- NAME to create or open existing shared memory objects.
- A NAME argument specifies the shared memory object to be opened.
- In the GNU C Library it must be a string smaller than ‘NAME_MAX’
- bytes starting with an optional slash but containing no other
- slashes.
- The semantics of OFLAG and MODE arguments is same as in ‘open’.
- ‘shm_open’ returns the file descriptor on success or -1 on error.
- On failure ‘errno’ is set.
- -- Function: int shm_unlink (const char *NAME)
- Preliminary: | MT-Safe locale | AS-Unsafe init heap lock |
- AC-Unsafe lock mem fd | *Note POSIX Safety Concepts::.
- This function is the inverse of ‘shm_open’ and removes the object
- with the given NAME previously created by ‘shm_open’.
- ‘shm_unlink’ returns 0 on success or -1 on error. On failure
- ‘errno’ is set.
- -- Function: int memfd_create (const char *NAME, unsigned int FLAGS)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe fd | *Note POSIX Safety
- Concepts::.
- The ‘memfd_create’ function returns a file descriptor which can be
- used to create memory mappings using the ‘mmap’ function. It is
- similar to the ‘shm_open’ function in the sense that these mappings
- are not backed by actual files. However, the descriptor returned
- by ‘memfd_create’ does not correspond to a named object; the NAME
- argument is used for debugging purposes only (e.g., will appear in
- ‘/proc’), and separate invocations of ‘memfd_create’ with the same
- NAME will not return descriptors for the same region of memory.
- The descriptor can also be used to create alias mappings within the
- same process.
- The descriptor initially refers to a zero-length file. Before
- mappings can be created which are backed by memory, the file size
- needs to be increased with the ‘ftruncate’ function. *Note File
- Size::.
- The FLAGS argument can be a combination of the following flags:
- ‘MFD_CLOEXEC’
- The descriptor is created with the ‘O_CLOEXEC’ flag.
- ‘MFD_ALLOW_SEALING’
- The descriptor supports the addition of seals using the
- ‘fcntl’ function.
- ‘MFD_HUGETLB’
- This requests that mappings created using the returned file
- descriptor use a larger page size. See ‘MAP_HUGETLB’ above
- for details.
- This flag is incompatible with ‘MFD_ALLOW_SEALING’.
- ‘memfd_create’ returns a file descriptor on success, and -1 on
- failure.
- The following ‘errno’ error conditions are defined for this
- function:
- ‘EINVAL’
- An invalid combination is specified in FLAGS, or NAME is too
- long.
- ‘EFAULT’
- The NAME argument does not point to a string.
- ‘EMFILE’
- The operation would exceed the file descriptor limit for this
- process.
- ‘ENFILE’
- The operation would exceed the system-wide file descriptor
- limit.
- ‘ENOMEM’
- There is not enough memory for the operation.
- File: libc.info, Node: Waiting for I/O, Next: Synchronizing I/O, Prev: Memory-mapped I/O, Up: Low-Level I/O
- 13.9 Waiting for Input or Output
- ================================
- Sometimes a program needs to accept input on multiple input channels
- whenever input arrives. For example, some workstations may have devices
- such as a digitizing tablet, function button box, or dial box that are
- connected via normal asynchronous serial interfaces; good user interface
- style requires responding immediately to input on any device. Another
- example is a program that acts as a server to several other processes
- via pipes or sockets.
- You cannot normally use ‘read’ for this purpose, because this blocks
- the program until input is available on one particular file descriptor;
- input on other channels won't wake it up. You could set nonblocking
- mode and poll each file descriptor in turn, but this is very
- inefficient.
- A better solution is to use the ‘select’ function. This blocks the
- program until input or output is ready on a specified set of file
- descriptors, or until a timer expires, whichever comes first. This
- facility is declared in the header file ‘sys/select.h’.
- In the case of a server socket (*note Listening::), we say that
- "input" is available when there are pending connections that could be
- accepted (*note Accepting Connections::). ‘accept’ for server sockets
- blocks and interacts with ‘select’ just as ‘read’ does for normal input.
- The file descriptor sets for the ‘select’ function are specified as
- ‘fd_set’ objects. Here is the description of the data type and some
- macros for manipulating these objects.
- -- Data Type: fd_set
- The ‘fd_set’ data type represents file descriptor sets for the
- ‘select’ function. It is actually a bit array.
- -- Macro: int FD_SETSIZE
- The value of this macro is the maximum number of file descriptors
- that a ‘fd_set’ object can hold information about. On systems with
- a fixed maximum number, ‘FD_SETSIZE’ is at least that number. On
- some systems, including GNU, there is no absolute limit on the
- number of descriptors open, but this macro still has a constant
- value which controls the number of bits in an ‘fd_set’; if you get
- a file descriptor with a value as high as ‘FD_SETSIZE’, you cannot
- put that descriptor into an ‘fd_set’.
- -- Macro: void FD_ZERO (fd_set *SET)
- Preliminary: | MT-Safe race:set | AS-Safe | AC-Safe | *Note POSIX
- Safety Concepts::.
- This macro initializes the file descriptor set SET to be the empty
- set.
- -- Macro: void FD_SET (int FILEDES, fd_set *SET)
- Preliminary: | MT-Safe race:set | AS-Safe | AC-Safe | *Note POSIX
- Safety Concepts::.
- This macro adds FILEDES to the file descriptor set SET.
- The FILEDES parameter must not have side effects since it is
- evaluated more than once.
- -- Macro: void FD_CLR (int FILEDES, fd_set *SET)
- Preliminary: | MT-Safe race:set | AS-Safe | AC-Safe | *Note POSIX
- Safety Concepts::.
- This macro removes FILEDES from the file descriptor set SET.
- The FILEDES parameter must not have side effects since it is
- evaluated more than once.
- -- Macro: int FD_ISSET (int FILEDES, const fd_set *SET)
- Preliminary: | MT-Safe race:set | AS-Safe | AC-Safe | *Note POSIX
- Safety Concepts::.
- This macro returns a nonzero value (true) if FILEDES is a member of
- the file descriptor set SET, and zero (false) otherwise.
- The FILEDES parameter must not have side effects since it is
- evaluated more than once.
- Next, here is the description of the ‘select’ function itself.
- -- Function: int select (int NFDS, fd_set *READ-FDS, fd_set *WRITE-FDS,
- fd_set *EXCEPT-FDS, struct timeval *TIMEOUT)
- Preliminary: | MT-Safe race:read-fds race:write-fds race:except-fds
- | AS-Safe | AC-Safe | *Note POSIX Safety Concepts::.
- The ‘select’ function blocks the calling process until there is
- activity on any of the specified sets of file descriptors, or until
- the timeout period has expired.
- The file descriptors specified by the READ-FDS argument are checked
- to see if they are ready for reading; the WRITE-FDS file
- descriptors are checked to see if they are ready for writing; and
- the EXCEPT-FDS file descriptors are checked for exceptional
- conditions. You can pass a null pointer for any of these arguments
- if you are not interested in checking for that kind of condition.
- A file descriptor is considered ready for reading if a ‘read’ call
- will not block. This usually includes the read offset being at the
- end of the file or there is an error to report. A server socket is
- considered ready for reading if there is a pending connection which
- can be accepted with ‘accept’; *note Accepting Connections::. A
- client socket is ready for writing when its connection is fully
- established; *note Connecting::.
- "Exceptional conditions" does not mean errors--errors are reported
- immediately when an erroneous system call is executed, and do not
- constitute a state of the descriptor. Rather, they include
- conditions such as the presence of an urgent message on a socket.
- (*Note Sockets::, for information on urgent messages.)
- The ‘select’ function checks only the first NFDS file descriptors.
- The usual thing is to pass ‘FD_SETSIZE’ as the value of this
- argument.
- The TIMEOUT specifies the maximum time to wait. If you pass a null
- pointer for this argument, it means to block indefinitely until one
- of the file descriptors is ready. Otherwise, you should provide
- the time in ‘struct timeval’ format; see *note Time Types::.
- Specify zero as the time (a ‘struct timeval’ containing all zeros)
- if you want to find out which descriptors are ready without waiting
- if none are ready.
- The normal return value from ‘select’ is the total number of ready
- file descriptors in all of the sets. Each of the argument sets is
- overwritten with information about the descriptors that are ready
- for the corresponding operation. Thus, to see if a particular
- descriptor DESC has input, use ‘FD_ISSET (DESC, READ-FDS)’ after
- ‘select’ returns.
- If ‘select’ returns because the timeout period expires, it returns
- a value of zero.
- Any signal will cause ‘select’ to return immediately. So if your
- program uses signals, you can't rely on ‘select’ to keep waiting
- for the full time specified. If you want to be sure of waiting for
- a particular amount of time, you must check for ‘EINTR’ and repeat
- the ‘select’ with a newly calculated timeout based on the current
- time. See the example below. See also *note Interrupted
- Primitives::.
- If an error occurs, ‘select’ returns ‘-1’ and does not modify the
- argument file descriptor sets. The following ‘errno’ error
- conditions are defined for this function:
- ‘EBADF’
- One of the file descriptor sets specified an invalid file
- descriptor.
- ‘EINTR’
- The operation was interrupted by a signal. *Note Interrupted
- Primitives::.
- ‘EINVAL’
- The TIMEOUT argument is invalid; one of the components is
- negative or too large.
- Here is an example showing how you can use ‘select’ to establish a
- timeout period for reading from a file descriptor. The ‘input_timeout’
- function blocks the calling process until input is available on the file
- descriptor, or until the timeout period expires.
- #define _GNU_SOURCE 1
- #include <errno.h>
- #include <stdio.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/select.h>
- int
- input_timeout (int filedes, unsigned int seconds)
- {
- fd_set set;
- struct timeval timeout;
- /* Initialize the file descriptor set. */
- FD_ZERO (&set);
- FD_SET (filedes, &set);
- /* Initialize the timeout data structure. */
- timeout.tv_sec = seconds;
- timeout.tv_usec = 0;
- /* ‘select’ returns 0 if timeout, 1 if input available, -1 if error. */
- return TEMP_FAILURE_RETRY (select (FD_SETSIZE,
- &set, NULL, NULL,
- &timeout));
- }
- int
- main (void)
- {
- fprintf (stderr, "select returned %d.\n",
- input_timeout (STDIN_FILENO, 5));
- return 0;
- }
- There is another example showing the use of ‘select’ to multiplex
- input from multiple sockets in *note Server Example::.
- For an alternate interface to this functionality, see ‘poll’ (*note
- Other Low-Level I/O APIs::).
- File: libc.info, Node: Synchronizing I/O, Next: Asynchronous I/O, Prev: Waiting for I/O, Up: Low-Level I/O
- 13.10 Synchronizing I/O operations
- ==================================
- In most modern operating systems, the normal I/O operations are not
- executed synchronously. I.e., even if a ‘write’ system call returns,
- this does not mean the data is actually written to the media, e.g., the
- disk.
- In situations where synchronization points are necessary, you can use
- special functions which ensure that all operations finish before they
- return.
- -- Function: void sync (void)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- A call to this function will not return as long as there is data
- which has not been written to the device. All dirty buffers in the
- kernel will be written and so an overall consistent system can be
- achieved (if no other process in parallel writes data).
- A prototype for ‘sync’ can be found in ‘unistd.h’.
- Programs more often want to ensure that data written to a given file
- is committed, rather than all data in the system. For this, ‘sync’ is
- overkill.
- -- Function: int fsync (int FILDES)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- The ‘fsync’ function can be used to make sure all data associated
- with the open file FILDES is written to the device associated with
- the descriptor. The function call does not return unless all
- actions have finished.
- A prototype for ‘fsync’ can be found in ‘unistd.h’.
- This function is a cancellation point in multi-threaded programs.
- This is a problem if the thread allocates some resources (like
- memory, file descriptors, semaphores or whatever) at the time
- ‘fsync’ is called. If the thread gets canceled these resources
- stay allocated until the program ends. To avoid this, calls to
- ‘fsync’ should be protected using cancellation handlers.
- The return value of the function is zero if no error occurred.
- Otherwise it is -1 and the global variable ‘errno’ is set to the
- following values:
- ‘EBADF’
- The descriptor FILDES is not valid.
- ‘EINVAL’
- No synchronization is possible since the system does not
- implement this.
- Sometimes it is not even necessary to write all data associated with
- a file descriptor. E.g., in database files which do not change in size
- it is enough to write all the file content data to the device.
- Meta-information, like the modification time etc., are not that
- important and leaving such information uncommitted does not prevent a
- successful recovery of the file in case of a problem.
- -- Function: int fdatasync (int FILDES)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- When a call to the ‘fdatasync’ function returns, it is ensured that
- all of the file data is written to the device. For all pending I/O
- operations, the parts guaranteeing data integrity finished.
- Not all systems implement the ‘fdatasync’ operation. On systems
- missing this functionality ‘fdatasync’ is emulated by a call to
- ‘fsync’ since the performed actions are a superset of those
- required by ‘fdatasync’.
- The prototype for ‘fdatasync’ is in ‘unistd.h’.
- The return value of the function is zero if no error occurred.
- Otherwise it is -1 and the global variable ‘errno’ is set to the
- following values:
- ‘EBADF’
- The descriptor FILDES is not valid.
- ‘EINVAL’
- No synchronization is possible since the system does not
- implement this.
- File: libc.info, Node: Asynchronous I/O, Next: Control Operations, Prev: Synchronizing I/O, Up: Low-Level I/O
- 13.11 Perform I/O Operations in Parallel
- ========================================
- The POSIX.1b standard defines a new set of I/O operations which can
- significantly reduce the time an application spends waiting for I/O. The
- new functions allow a program to initiate one or more I/O operations and
- then immediately resume normal work while the I/O operations are
- executed in parallel. This functionality is available if the ‘unistd.h’
- file defines the symbol ‘_POSIX_ASYNCHRONOUS_IO’.
- These functions are part of the library with realtime functions named
- ‘librt’. They are not actually part of the ‘libc’ binary. The
- implementation of these functions can be done using support in the
- kernel (if available) or using an implementation based on threads at
- userlevel. In the latter case it might be necessary to link
- applications with the thread library ‘libpthread’ in addition to
- ‘librt’.
- All AIO operations operate on files which were opened previously.
- There might be arbitrarily many operations running for one file. The
- asynchronous I/O operations are controlled using a data structure named
- ‘struct aiocb’ (“AIO control block”). It is defined in ‘aio.h’ as
- follows.
- -- Data Type: struct aiocb
- The POSIX.1b standard mandates that the ‘struct aiocb’ structure
- contains at least the members described in the following table.
- There might be more elements which are used by the implementation,
- but depending upon these elements is not portable and is highly
- deprecated.
- ‘int aio_fildes’
- This element specifies the file descriptor to be used for the
- operation. It must be a legal descriptor, otherwise the
- operation will fail.
- The device on which the file is opened must allow the seek
- operation. I.e., it is not possible to use any of the AIO
- operations on devices like terminals where an ‘lseek’ call
- would lead to an error.
- ‘off_t aio_offset’
- This element specifies the offset in the file at which the
- operation (input or output) is performed. Since the
- operations are carried out in arbitrary order and more than
- one operation for one file descriptor can be started, one
- cannot expect a current read/write position of the file
- descriptor.
- ‘volatile void *aio_buf’
- This is a pointer to the buffer with the data to be written or
- the place where the read data is stored.
- ‘size_t aio_nbytes’
- This element specifies the length of the buffer pointed to by
- ‘aio_buf’.
- ‘int aio_reqprio’
- If the platform has defined ‘_POSIX_PRIORITIZED_IO’ and
- ‘_POSIX_PRIORITY_SCHEDULING’, the AIO requests are processed
- based on the current scheduling priority. The ‘aio_reqprio’
- element can then be used to lower the priority of the AIO
- operation.
- ‘struct sigevent aio_sigevent’
- This element specifies how the calling process is notified
- once the operation terminates. If the ‘sigev_notify’ element
- is ‘SIGEV_NONE’, no notification is sent. If it is
- ‘SIGEV_SIGNAL’, the signal determined by ‘sigev_signo’ is
- sent. Otherwise, ‘sigev_notify’ must be ‘SIGEV_THREAD’. In
- this case, a thread is created which starts executing the
- function pointed to by ‘sigev_notify_function’.
- ‘int aio_lio_opcode’
- This element is only used by the ‘lio_listio’ and
- ‘lio_listio64’ functions. Since these functions allow an
- arbitrary number of operations to start at once, and each
- operation can be input or output (or nothing), the information
- must be stored in the control block. The possible values are:
- ‘LIO_READ’
- Start a read operation. Read from the file at position
- ‘aio_offset’ and store the next ‘aio_nbytes’ bytes in the
- buffer pointed to by ‘aio_buf’.
- ‘LIO_WRITE’
- Start a write operation. Write ‘aio_nbytes’ bytes
- starting at ‘aio_buf’ into the file starting at position
- ‘aio_offset’.
- ‘LIO_NOP’
- Do nothing for this control block. This value is useful
- sometimes when an array of ‘struct aiocb’ values contains
- holes, i.e., some of the values must not be handled
- although the whole array is presented to the ‘lio_listio’
- function.
- When the sources are compiled using ‘_FILE_OFFSET_BITS == 64’ on a
- 32 bit machine, this type is in fact ‘struct aiocb64’, since the
- LFS interface transparently replaces the ‘struct aiocb’ definition.
- For use with the AIO functions defined in the LFS, there is a similar
- type defined which replaces the types of the appropriate members with
- larger types but otherwise is equivalent to ‘struct aiocb’.
- Particularly, all member names are the same.
- -- Data Type: struct aiocb64
- ‘int aio_fildes’
- This element specifies the file descriptor which is used for
- the operation. It must be a legal descriptor since otherwise
- the operation fails for obvious reasons.
- The device on which the file is opened must allow the seek
- operation. I.e., it is not possible to use any of the AIO
- operations on devices like terminals where an ‘lseek’ call
- would lead to an error.
- ‘off64_t aio_offset’
- This element specifies at which offset in the file the
- operation (input or output) is performed. Since the operation
- are carried in arbitrary order and more than one operation for
- one file descriptor can be started, one cannot expect a
- current read/write position of the file descriptor.
- ‘volatile void *aio_buf’
- This is a pointer to the buffer with the data to be written or
- the place where the read data is stored.
- ‘size_t aio_nbytes’
- This element specifies the length of the buffer pointed to by
- ‘aio_buf’.
- ‘int aio_reqprio’
- If for the platform ‘_POSIX_PRIORITIZED_IO’ and
- ‘_POSIX_PRIORITY_SCHEDULING’ are defined the AIO requests are
- processed based on the current scheduling priority. The
- ‘aio_reqprio’ element can then be used to lower the priority
- of the AIO operation.
- ‘struct sigevent aio_sigevent’
- This element specifies how the calling process is notified
- once the operation terminates. If the ‘sigev_notify’ element
- is ‘SIGEV_NONE’ no notification is sent. If it is
- ‘SIGEV_SIGNAL’, the signal determined by ‘sigev_signo’ is
- sent. Otherwise, ‘sigev_notify’ must be ‘SIGEV_THREAD’ in
- which case a thread is created which starts executing the
- function pointed to by ‘sigev_notify_function’.
- ‘int aio_lio_opcode’
- This element is only used by the ‘lio_listio’ and
- ‘lio_listio64’ functions. Since these functions allow an
- arbitrary number of operations to start at once, and since
- each operation can be input or output (or nothing), the
- information must be stored in the control block. See the
- description of ‘struct aiocb’ for a description of the
- possible values.
- When the sources are compiled using ‘_FILE_OFFSET_BITS == 64’ on a
- 32 bit machine, this type is available under the name ‘struct
- aiocb64’, since the LFS transparently replaces the old interface.
- * Menu:
- * Asynchronous Reads/Writes:: Asynchronous Read and Write Operations.
- * Status of AIO Operations:: Getting the Status of AIO Operations.
- * Synchronizing AIO Operations:: Getting into a consistent state.
- * Cancel AIO Operations:: Cancellation of AIO Operations.
- * Configuration of AIO:: How to optimize the AIO implementation.
- File: libc.info, Node: Asynchronous Reads/Writes, Next: Status of AIO Operations, Up: Asynchronous I/O
- 13.11.1 Asynchronous Read and Write Operations
- ----------------------------------------------
- -- Function: int aio_read (struct aiocb *AIOCBP)
- Preliminary: | MT-Safe | AS-Unsafe lock heap | AC-Unsafe lock mem |
- *Note POSIX Safety Concepts::.
- This function initiates an asynchronous read operation. It
- immediately returns after the operation was enqueued or when an
- error was encountered.
- The first ‘aiocbp->aio_nbytes’ bytes of the file for which
- ‘aiocbp->aio_fildes’ is a descriptor are written to the buffer
- starting at ‘aiocbp->aio_buf’. Reading starts at the absolute
- position ‘aiocbp->aio_offset’ in the file.
- If prioritized I/O is supported by the platform the
- ‘aiocbp->aio_reqprio’ value is used to adjust the priority before
- the request is actually enqueued.
- The calling process is notified about the termination of the read
- request according to the ‘aiocbp->aio_sigevent’ value.
- When ‘aio_read’ returns, the return value is zero if no error
- occurred that can be found before the process is enqueued. If such
- an early error is found, the function returns -1 and sets ‘errno’
- to one of the following values:
- ‘EAGAIN’
- The request was not enqueued due to (temporarily) exceeded
- resource limitations.
- ‘ENOSYS’
- The ‘aio_read’ function is not implemented.
- ‘EBADF’
- The ‘aiocbp->aio_fildes’ descriptor is not valid. This
- condition need not be recognized before enqueueing the request
- and so this error might also be signaled asynchronously.
- ‘EINVAL’
- The ‘aiocbp->aio_offset’ or ‘aiocbp->aio_reqpiro’ value is
- invalid. This condition need not be recognized before
- enqueueing the request and so this error might also be
- signaled asynchronously.
- If ‘aio_read’ returns zero, the current status of the request can
- be queried using ‘aio_error’ and ‘aio_return’ functions. As long
- as the value returned by ‘aio_error’ is ‘EINPROGRESS’ the operation
- has not yet completed. If ‘aio_error’ returns zero, the operation
- successfully terminated, otherwise the value is to be interpreted
- as an error code. If the function terminated, the result of the
- operation can be obtained using a call to ‘aio_return’. The
- returned value is the same as an equivalent call to ‘read’ would
- have returned. Possible error codes returned by ‘aio_error’ are:
- ‘EBADF’
- The ‘aiocbp->aio_fildes’ descriptor is not valid.
- ‘ECANCELED’
- The operation was canceled before the operation was finished
- (*note Cancel AIO Operations::)
- ‘EINVAL’
- The ‘aiocbp->aio_offset’ value is invalid.
- When the sources are compiled with ‘_FILE_OFFSET_BITS == 64’ this
- function is in fact ‘aio_read64’ since the LFS interface
- transparently replaces the normal implementation.
- -- Function: int aio_read64 (struct aiocb64 *AIOCBP)
- Preliminary: | MT-Safe | AS-Unsafe lock heap | AC-Unsafe lock mem |
- *Note POSIX Safety Concepts::.
- This function is similar to the ‘aio_read’ function. The only
- difference is that on 32 bit machines, the file descriptor should
- be opened in the large file mode. Internally, ‘aio_read64’ uses
- functionality equivalent to ‘lseek64’ (*note File Position
- Primitive::) to position the file descriptor correctly for the
- reading, as opposed to the ‘lseek’ functionality used in
- ‘aio_read’.
- When the sources are compiled with ‘_FILE_OFFSET_BITS == 64’, this
- function is available under the name ‘aio_read’ and so
- transparently replaces the interface for small files on 32 bit
- machines.
- To write data asynchronously to a file, there exists an equivalent
- pair of functions with a very similar interface.
- -- Function: int aio_write (struct aiocb *AIOCBP)
- Preliminary: | MT-Safe | AS-Unsafe lock heap | AC-Unsafe lock mem |
- *Note POSIX Safety Concepts::.
- This function initiates an asynchronous write operation. The
- function call immediately returns after the operation was enqueued
- or if before this happens an error was encountered.
- The first ‘aiocbp->aio_nbytes’ bytes from the buffer starting at
- ‘aiocbp->aio_buf’ are written to the file for which
- ‘aiocbp->aio_fildes’ is a descriptor, starting at the absolute
- position ‘aiocbp->aio_offset’ in the file.
- If prioritized I/O is supported by the platform, the
- ‘aiocbp->aio_reqprio’ value is used to adjust the priority before
- the request is actually enqueued.
- The calling process is notified about the termination of the read
- request according to the ‘aiocbp->aio_sigevent’ value.
- When ‘aio_write’ returns, the return value is zero if no error
- occurred that can be found before the process is enqueued. If such
- an early error is found the function returns -1 and sets ‘errno’ to
- one of the following values.
- ‘EAGAIN’
- The request was not enqueued due to (temporarily) exceeded
- resource limitations.
- ‘ENOSYS’
- The ‘aio_write’ function is not implemented.
- ‘EBADF’
- The ‘aiocbp->aio_fildes’ descriptor is not valid. This
- condition may not be recognized before enqueueing the request,
- and so this error might also be signaled asynchronously.
- ‘EINVAL’
- The ‘aiocbp->aio_offset’ or ‘aiocbp->aio_reqprio’ value is
- invalid. This condition may not be recognized before
- enqueueing the request and so this error might also be
- signaled asynchronously.
- In the case ‘aio_write’ returns zero, the current status of the
- request can be queried using the ‘aio_error’ and ‘aio_return’
- functions. As long as the value returned by ‘aio_error’ is
- ‘EINPROGRESS’ the operation has not yet completed. If ‘aio_error’
- returns zero, the operation successfully terminated, otherwise the
- value is to be interpreted as an error code. If the function
- terminated, the result of the operation can be obtained using a
- call to ‘aio_return’. The returned value is the same as an
- equivalent call to ‘read’ would have returned. Possible error
- codes returned by ‘aio_error’ are:
- ‘EBADF’
- The ‘aiocbp->aio_fildes’ descriptor is not valid.
- ‘ECANCELED’
- The operation was canceled before the operation was finished.
- (*note Cancel AIO Operations::)
- ‘EINVAL’
- The ‘aiocbp->aio_offset’ value is invalid.
- When the sources are compiled with ‘_FILE_OFFSET_BITS == 64’, this
- function is in fact ‘aio_write64’ since the LFS interface
- transparently replaces the normal implementation.
- -- Function: int aio_write64 (struct aiocb64 *AIOCBP)
- Preliminary: | MT-Safe | AS-Unsafe lock heap | AC-Unsafe lock mem |
- *Note POSIX Safety Concepts::.
- This function is similar to the ‘aio_write’ function. The only
- difference is that on 32 bit machines the file descriptor should be
- opened in the large file mode. Internally ‘aio_write64’ uses
- functionality equivalent to ‘lseek64’ (*note File Position
- Primitive::) to position the file descriptor correctly for the
- writing, as opposed to the ‘lseek’ functionality used in
- ‘aio_write’.
- When the sources are compiled with ‘_FILE_OFFSET_BITS == 64’, this
- function is available under the name ‘aio_write’ and so
- transparently replaces the interface for small files on 32 bit
- machines.
- Besides these functions with the more or less traditional interface,
- POSIX.1b also defines a function which can initiate more than one
- operation at a time, and which can handle freely mixed read and write
- operations. It is therefore similar to a combination of ‘readv’ and
- ‘writev’.
- -- Function: int lio_listio (int MODE, struct aiocb *const LIST[], int
- NENT, struct sigevent *SIG)
- Preliminary: | MT-Safe | AS-Unsafe lock heap | AC-Unsafe lock mem |
- *Note POSIX Safety Concepts::.
- The ‘lio_listio’ function can be used to enqueue an arbitrary
- number of read and write requests at one time. The requests can
- all be meant for the same file, all for different files or every
- solution in between.
- ‘lio_listio’ gets the NENT requests from the array pointed to by
- LIST. The operation to be performed is determined by the
- ‘aio_lio_opcode’ member in each element of LIST. If this field is
- ‘LIO_READ’ a read operation is enqueued, similar to a call of
- ‘aio_read’ for this element of the array (except that the way the
- termination is signalled is different, as we will see below). If
- the ‘aio_lio_opcode’ member is ‘LIO_WRITE’ a write operation is
- enqueued. Otherwise the ‘aio_lio_opcode’ must be ‘LIO_NOP’ in
- which case this element of LIST is simply ignored. This
- "operation" is useful in situations where one has a fixed array of
- ‘struct aiocb’ elements from which only a few need to be handled at
- a time. Another situation is where the ‘lio_listio’ call was
- canceled before all requests are processed (*note Cancel AIO
- Operations::) and the remaining requests have to be reissued.
- The other members of each element of the array pointed to by ‘list’
- must have values suitable for the operation as described in the
- documentation for ‘aio_read’ and ‘aio_write’ above.
- The MODE argument determines how ‘lio_listio’ behaves after having
- enqueued all the requests. If MODE is ‘LIO_WAIT’ it waits until
- all requests terminated. Otherwise MODE must be ‘LIO_NOWAIT’ and
- in this case the function returns immediately after having enqueued
- all the requests. In this case the caller gets a notification of
- the termination of all requests according to the SIG parameter. If
- SIG is ‘NULL’ no notification is sent. Otherwise a signal is sent
- or a thread is started, just as described in the description for
- ‘aio_read’ or ‘aio_write’.
- If MODE is ‘LIO_WAIT’, the return value of ‘lio_listio’ is 0 when
- all requests completed successfully. Otherwise the function
- returns -1 and ‘errno’ is set accordingly. To find out which
- request or requests failed one has to use the ‘aio_error’ function
- on all the elements of the array LIST.
- In case MODE is ‘LIO_NOWAIT’, the function returns 0 if all
- requests were enqueued correctly. The current state of the
- requests can be found using ‘aio_error’ and ‘aio_return’ as
- described above. If ‘lio_listio’ returns -1 in this mode, the
- global variable ‘errno’ is set accordingly. If a request did not
- yet terminate, a call to ‘aio_error’ returns ‘EINPROGRESS’. If the
- value is different, the request is finished and the error value (or
- 0) is returned and the result of the operation can be retrieved
- using ‘aio_return’.
- Possible values for ‘errno’ are:
- ‘EAGAIN’
- The resources necessary to queue all the requests are not
- available at the moment. The error status for each element of
- LIST must be checked to determine which request failed.
- Another reason could be that the system wide limit of AIO
- requests is exceeded. This cannot be the case for the
- implementation on GNU systems since no arbitrary limits exist.
- ‘EINVAL’
- The MODE parameter is invalid or NENT is larger than
- ‘AIO_LISTIO_MAX’.
- ‘EIO’
- One or more of the request's I/O operations failed. The error
- status of each request should be checked to determine which
- one failed.
- ‘ENOSYS’
- The ‘lio_listio’ function is not supported.
- If the MODE parameter is ‘LIO_NOWAIT’ and the caller cancels a
- request, the error status for this request returned by ‘aio_error’
- is ‘ECANCELED’.
- When the sources are compiled with ‘_FILE_OFFSET_BITS == 64’, this
- function is in fact ‘lio_listio64’ since the LFS interface
- transparently replaces the normal implementation.
- -- Function: int lio_listio64 (int MODE, struct aiocb64 *const LIST[],
- int NENT, struct sigevent *SIG)
- Preliminary: | MT-Safe | AS-Unsafe lock heap | AC-Unsafe lock mem |
- *Note POSIX Safety Concepts::.
- This function is similar to the ‘lio_listio’ function. The only
- difference is that on 32 bit machines, the file descriptor should
- be opened in the large file mode. Internally, ‘lio_listio64’ uses
- functionality equivalent to ‘lseek64’ (*note File Position
- Primitive::) to position the file descriptor correctly for the
- reading or writing, as opposed to the ‘lseek’ functionality used in
- ‘lio_listio’.
- When the sources are compiled with ‘_FILE_OFFSET_BITS == 64’, this
- function is available under the name ‘lio_listio’ and so
- transparently replaces the interface for small files on 32 bit
- machines.
- File: libc.info, Node: Status of AIO Operations, Next: Synchronizing AIO Operations, Prev: Asynchronous Reads/Writes, Up: Asynchronous I/O
- 13.11.2 Getting the Status of AIO Operations
- --------------------------------------------
- As already described in the documentation of the functions in the last
- section, it must be possible to get information about the status of an
- I/O request. When the operation is performed truly asynchronously (as
- with ‘aio_read’ and ‘aio_write’ and with ‘lio_listio’ when the mode is
- ‘LIO_NOWAIT’), one sometimes needs to know whether a specific request
- already terminated and if so, what the result was. The following two
- functions allow you to get this kind of information.
- -- Function: int aio_error (const struct aiocb *AIOCBP)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function determines the error state of the request described
- by the ‘struct aiocb’ variable pointed to by AIOCBP. If the
- request has not yet terminated the value returned is always
- ‘EINPROGRESS’. Once the request has terminated the value
- ‘aio_error’ returns is either 0 if the request completed
- successfully or it returns the value which would be stored in the
- ‘errno’ variable if the request would have been done using ‘read’,
- ‘write’, or ‘fsync’.
- The function can return ‘ENOSYS’ if it is not implemented. It
- could also return ‘EINVAL’ if the AIOCBP parameter does not refer
- to an asynchronous operation whose return status is not yet known.
- When the sources are compiled with ‘_FILE_OFFSET_BITS == 64’ this
- function is in fact ‘aio_error64’ since the LFS interface
- transparently replaces the normal implementation.
- -- Function: int aio_error64 (const struct aiocb64 *AIOCBP)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function is similar to ‘aio_error’ with the only difference
- that the argument is a reference to a variable of type ‘struct
- aiocb64’.
- When the sources are compiled with ‘_FILE_OFFSET_BITS == 64’ this
- function is available under the name ‘aio_error’ and so
- transparently replaces the interface for small files on 32 bit
- machines.
- -- Function: ssize_t aio_return (struct aiocb *AIOCBP)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function can be used to retrieve the return status of the
- operation carried out by the request described in the variable
- pointed to by AIOCBP. As long as the error status of this request
- as returned by ‘aio_error’ is ‘EINPROGRESS’ the return value of
- this function is undefined.
- Once the request is finished this function can be used exactly once
- to retrieve the return value. Following calls might lead to
- undefined behavior. The return value itself is the value which
- would have been returned by the ‘read’, ‘write’, or ‘fsync’ call.
- The function can return ‘ENOSYS’ if it is not implemented. It
- could also return ‘EINVAL’ if the AIOCBP parameter does not refer
- to an asynchronous operation whose return status is not yet known.
- When the sources are compiled with ‘_FILE_OFFSET_BITS == 64’ this
- function is in fact ‘aio_return64’ since the LFS interface
- transparently replaces the normal implementation.
- -- Function: ssize_t aio_return64 (struct aiocb64 *AIOCBP)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function is similar to ‘aio_return’ with the only difference
- that the argument is a reference to a variable of type ‘struct
- aiocb64’.
- When the sources are compiled with ‘_FILE_OFFSET_BITS == 64’ this
- function is available under the name ‘aio_return’ and so
- transparently replaces the interface for small files on 32 bit
- machines.
|