1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245 |
- This is libc.info, produced by makeinfo version 5.2 from libc.texinfo.
- This file documents the GNU C Library.
- This is ‘The GNU C Library Reference Manual’, for version 2.25.
- Copyright © 1993–2017 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
- * a64l: (libc)Encode Binary Data.
- * abort: (libc)Aborting a Program.
- * abs: (libc)Absolute Value.
- * accept: (libc)Accepting Connections.
- * access: (libc)Testing File Access.
- * acosf: (libc)Inverse Trig Functions.
- * acoshf: (libc)Hyperbolic Functions.
- * acosh: (libc)Hyperbolic Functions.
- * acoshl: (libc)Hyperbolic Functions.
- * acos: (libc)Inverse Trig Functions.
- * acosl: (libc)Inverse Trig Functions.
- * addmntent: (libc)mtab.
- * addseverity: (libc)Adding Severity Classes.
- * adjtime: (libc)High-Resolution Calendar.
- * adjtimex: (libc)High-Resolution Calendar.
- * 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.
- * ALTWERASE: (libc)Local Modes.
- * ARG_MAX: (libc)General Limits.
- * argp_error: (libc)Argp Helper Functions.
- * ARGP_ERR_UNKNOWN: (libc)Argp Parser 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.
- * asinf: (libc)Inverse Trig Functions.
- * asinhf: (libc)Hyperbolic Functions.
- * asinh: (libc)Hyperbolic Functions.
- * asinhl: (libc)Hyperbolic Functions.
- * asin: (libc)Inverse Trig Functions.
- * asinl: (libc)Inverse Trig Functions.
- * asprintf: (libc)Dynamic Output.
- * assert: (libc)Consistency Checking.
- * assert_perror: (libc)Consistency Checking.
- * atan2f: (libc)Inverse Trig Functions.
- * atan2: (libc)Inverse Trig Functions.
- * atan2l: (libc)Inverse Trig Functions.
- * atanf: (libc)Inverse Trig Functions.
- * atanhf: (libc)Hyperbolic Functions.
- * atanh: (libc)Hyperbolic Functions.
- * atanhl: (libc)Hyperbolic Functions.
- * atan: (libc)Inverse Trig Functions.
- * atanl: (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_fd: (libc)Backtraces.
- * backtrace_symbols: (libc)Backtraces.
- * basename: (libc)Finding Tokens in a String.
- * basename: (libc)Finding Tokens in a String.
- * BC_BASE_MAX: (libc)Utility Limits.
- * BC_DIM_MAX: (libc)Utility Limits.
- * bcmp: (libc)String/Array Comparison.
- * bcopy: (libc)Copying Strings and Arrays.
- * BC_SCALE_MAX: (libc)Utility Limits.
- * BC_STRING_MAX: (libc)Utility Limits.
- * bind: (libc)Setting Address.
- * bind_textdomain_codeset: (libc)Charset conversion in gettext.
- * bindtextdomain: (libc)Locating gettext catalog.
- * BRKINT: (libc)Input Modes.
- * brk: (libc)Resizing the Data Segment.
- * bsearch: (libc)Array Search Function.
- * btowc: (libc)Converting a Character.
- * BUFSIZ: (libc)Controlling Buffering.
- * bzero: (libc)Copying Strings and Arrays.
- * cabsf: (libc)Absolute Value.
- * cabs: (libc)Absolute Value.
- * cabsl: (libc)Absolute Value.
- * cacosf: (libc)Inverse Trig Functions.
- * cacoshf: (libc)Hyperbolic Functions.
- * cacosh: (libc)Hyperbolic Functions.
- * cacoshl: (libc)Hyperbolic Functions.
- * cacos: (libc)Inverse Trig Functions.
- * cacosl: (libc)Inverse Trig Functions.
- * calloc: (libc)Allocating Cleared Space.
- * canonicalize_file_name: (libc)Symbolic Links.
- * canonicalizef: (libc)FP Bit Twiddling.
- * canonicalize: (libc)FP Bit Twiddling.
- * canonicalizel: (libc)FP Bit Twiddling.
- * cargf: (libc)Operations on Complex.
- * carg: (libc)Operations on Complex.
- * cargl: (libc)Operations on Complex.
- * casinf: (libc)Inverse Trig Functions.
- * casinhf: (libc)Hyperbolic Functions.
- * casinh: (libc)Hyperbolic Functions.
- * casinhl: (libc)Hyperbolic Functions.
- * casin: (libc)Inverse Trig Functions.
- * casinl: (libc)Inverse Trig Functions.
- * catanf: (libc)Inverse Trig Functions.
- * catanhf: (libc)Hyperbolic Functions.
- * catanh: (libc)Hyperbolic Functions.
- * catanhl: (libc)Hyperbolic Functions.
- * catan: (libc)Inverse Trig Functions.
- * catanl: (libc)Inverse Trig Functions.
- * catclose: (libc)The catgets Functions.
- * catgets: (libc)The catgets Functions.
- * catopen: (libc)The catgets Functions.
- * cbc_crypt: (libc)DES Encryption.
- * cbrtf: (libc)Exponents and Logarithms.
- * cbrt: (libc)Exponents and Logarithms.
- * cbrtl: (libc)Exponents and Logarithms.
- * ccosf: (libc)Trig Functions.
- * ccoshf: (libc)Hyperbolic Functions.
- * ccosh: (libc)Hyperbolic Functions.
- * ccoshl: (libc)Hyperbolic Functions.
- * ccos: (libc)Trig Functions.
- * ccosl: (libc)Trig Functions.
- * CCTS_OFLOW: (libc)Control Modes.
- * ceilf: (libc)Rounding Functions.
- * ceil: (libc)Rounding Functions.
- * ceill: (libc)Rounding Functions.
- * cexpf: (libc)Exponents and Logarithms.
- * cexp: (libc)Exponents and Logarithms.
- * cexpl: (libc)Exponents and Logarithms.
- * cfgetispeed: (libc)Line Speed.
- * cfgetospeed: (libc)Line Speed.
- * cfmakeraw: (libc)Noncanonical Input.
- * cfree: (libc)Freeing after Malloc.
- * cfsetispeed: (libc)Line Speed.
- * cfsetospeed: (libc)Line Speed.
- * cfsetspeed: (libc)Line Speed.
- * chdir: (libc)Working Directory.
- * CHILD_MAX: (libc)General Limits.
- * chmod: (libc)Setting Permissions.
- * chown: (libc)File Owner.
- * CIGNORE: (libc)Control Modes.
- * cimagf: (libc)Operations on Complex.
- * cimag: (libc)Operations on Complex.
- * cimagl: (libc)Operations on Complex.
- * clearenv: (libc)Environment Access.
- * clearerr: (libc)Error Recovery.
- * clearerr_unlocked: (libc)Error Recovery.
- * CLK_TCK: (libc)Processor Time.
- * CLOCAL: (libc)Control Modes.
- * clock: (libc)CPU Time.
- * CLOCKS_PER_SEC: (libc)CPU Time.
- * clog10f: (libc)Exponents and Logarithms.
- * clog10: (libc)Exponents and Logarithms.
- * clog10l: (libc)Exponents and Logarithms.
- * clogf: (libc)Exponents and Logarithms.
- * clog: (libc)Exponents and Logarithms.
- * clogl: (libc)Exponents and Logarithms.
- * closedir: (libc)Reading/Closing Directory.
- * close: (libc)Opening and Closing Files.
- * closelog: (libc)closelog.
- * COLL_WEIGHTS_MAX: (libc)Utility Limits.
- * _Complex_I: (libc)Complex Numbers.
- * confstr: (libc)String Parameters.
- * conjf: (libc)Operations on Complex.
- * conj: (libc)Operations on Complex.
- * conjl: (libc)Operations on Complex.
- * connect: (libc)Connecting.
- * copysignf: (libc)FP Bit Twiddling.
- * copysign: (libc)FP Bit Twiddling.
- * copysignl: (libc)FP Bit Twiddling.
- * cosf: (libc)Trig Functions.
- * coshf: (libc)Hyperbolic Functions.
- * cosh: (libc)Hyperbolic Functions.
- * coshl: (libc)Hyperbolic Functions.
- * cos: (libc)Trig Functions.
- * cosl: (libc)Trig Functions.
- * cpowf: (libc)Exponents and Logarithms.
- * cpow: (libc)Exponents and Logarithms.
- * cpowl: (libc)Exponents and Logarithms.
- * cprojf: (libc)Operations on Complex.
- * cproj: (libc)Operations on Complex.
- * cprojl: (libc)Operations on Complex.
- * CPU_CLR: (libc)CPU Affinity.
- * CPU_ISSET: (libc)CPU Affinity.
- * CPU_SET: (libc)CPU Affinity.
- * CPU_SETSIZE: (libc)CPU Affinity.
- * CPU_ZERO: (libc)CPU Affinity.
- * CREAD: (libc)Control Modes.
- * crealf: (libc)Operations on Complex.
- * creal: (libc)Operations on Complex.
- * creall: (libc)Operations on Complex.
- * creat64: (libc)Opening and Closing Files.
- * creat: (libc)Opening and Closing Files.
- * CRTS_IFLOW: (libc)Control Modes.
- * crypt: (libc)crypt.
- * crypt_r: (libc)crypt.
- * CS5: (libc)Control Modes.
- * CS6: (libc)Control Modes.
- * CS7: (libc)Control Modes.
- * CS8: (libc)Control Modes.
- * csinf: (libc)Trig Functions.
- * csinhf: (libc)Hyperbolic Functions.
- * csinh: (libc)Hyperbolic Functions.
- * csinhl: (libc)Hyperbolic Functions.
- * csin: (libc)Trig Functions.
- * csinl: (libc)Trig Functions.
- * CSIZE: (libc)Control Modes.
- * csqrtf: (libc)Exponents and Logarithms.
- * csqrt: (libc)Exponents and Logarithms.
- * csqrtl: (libc)Exponents and Logarithms.
- * CSTOPB: (libc)Control Modes.
- * ctanf: (libc)Trig Functions.
- * ctanhf: (libc)Hyperbolic Functions.
- * ctanh: (libc)Hyperbolic Functions.
- * ctanhl: (libc)Hyperbolic Functions.
- * ctan: (libc)Trig 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.
- * dcgettext: (libc)Translation with gettext.
- * dcngettext: (libc)Advanced gettext functions.
- * DES_FAILED: (libc)DES Encryption.
- * des_setparity: (libc)DES Encryption.
- * dgettext: (libc)Translation with gettext.
- * difftime: (libc)Elapsed Time.
- * dirfd: (libc)Opening a Directory.
- * dirname: (libc)Finding Tokens in a String.
- * div: (libc)Integer Division.
- * dngettext: (libc)Advanced gettext functions.
- * drand48: (libc)SVID Random.
- * drand48_r: (libc)SVID Random.
- * dremf: (libc)Remainder Functions.
- * drem: (libc)Remainder Functions.
- * dreml: (libc)Remainder Functions.
- * DTTOIF: (libc)Directory Entries.
- * dup2: (libc)Duplicating Descriptors.
- * dup: (libc)Duplicating Descriptors.
- * 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.
- * EBADFD: (libc)Error Codes.
- * EBADF: (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.
- * ecb_crypt: (libc)DES Encryption.
- * ECHILD: (libc)Error Codes.
- * ECHOCTL: (libc)Local Modes.
- * ECHOE: (libc)Local Modes.
- * ECHOKE: (libc)Local Modes.
- * ECHOK: (libc)Local Modes.
- * ECHO: (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.
- * ecvt: (libc)System V Number Conversion.
- * ecvt_r: (libc)System V Number Conversion.
- * EDEADLK: (libc)Error Codes.
- * EDEADLOCK: (libc)Error Codes.
- * EDESTADDRREQ: (libc)Error Codes.
- * EDIED: (libc)Error Codes.
- * ED: (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.
- * encrypt: (libc)DES Encryption.
- * encrypt_r: (libc)DES Encryption.
- * 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.
- * 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.
- * 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.
- * 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.
- * erand48: (libc)SVID Random.
- * erand48_r: (libc)SVID Random.
- * ERANGE: (libc)Error Codes.
- * EREMCHG: (libc)Error Codes.
- * EREMOTEIO: (libc)Error Codes.
- * EREMOTE: (libc)Error Codes.
- * ERESTART: (libc)Error Codes.
- * erfcf: (libc)Special Functions.
- * erfc: (libc)Special Functions.
- * erfcl: (libc)Special Functions.
- * erff: (libc)Special Functions.
- * ERFKILL: (libc)Error Codes.
- * erf: (libc)Special Functions.
- * erfl: (libc)Special Functions.
- * EROFS: (libc)Error Codes.
- * ERPCMISMATCH: (libc)Error Codes.
- * err: (libc)Error Messages.
- * errno: (libc)Checking for Errors.
- * error_at_line: (libc)Error Messages.
- * error: (libc)Error Messages.
- * errx: (libc)Error Messages.
- * 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.
- * ETIMEDOUT: (libc)Error Codes.
- * ETIME: (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.
- * execle: (libc)Executing a File.
- * execl: (libc)Executing a File.
- * execlp: (libc)Executing a File.
- * execve: (libc)Executing a File.
- * execv: (libc)Executing a File.
- * execvp: (libc)Executing a File.
- * EXFULL: (libc)Error Codes.
- * EXIT_FAILURE: (libc)Exit Status.
- * exit: (libc)Normal Termination.
- * _exit: (libc)Termination Internals.
- * _Exit: (libc)Termination Internals.
- * EXIT_SUCCESS: (libc)Exit Status.
- * exp10f: (libc)Exponents and Logarithms.
- * exp10: (libc)Exponents and Logarithms.
- * exp10l: (libc)Exponents and Logarithms.
- * exp2f: (libc)Exponents and Logarithms.
- * exp2: (libc)Exponents and Logarithms.
- * exp2l: (libc)Exponents and Logarithms.
- * expf: (libc)Exponents and Logarithms.
- * exp: (libc)Exponents and Logarithms.
- * explicit_bzero: (libc)Erasing Sensitive Data.
- * expl: (libc)Exponents and Logarithms.
- * expm1f: (libc)Exponents and Logarithms.
- * expm1: (libc)Exponents and Logarithms.
- * expm1l: (libc)Exponents and Logarithms.
- * EXPR_NEST_MAX: (libc)Utility Limits.
- * fabsf: (libc)Absolute Value.
- * fabs: (libc)Absolute Value.
- * fabsl: (libc)Absolute Value.
- * __fbufsize: (libc)Controlling Buffering.
- * fchdir: (libc)Working Directory.
- * fchmod: (libc)Setting Permissions.
- * fchown: (libc)File Owner.
- * fcloseall: (libc)Closing Streams.
- * fclose: (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.
- * FD_CLOEXEC: (libc)Descriptor Flags.
- * FD_CLR: (libc)Waiting for I/O.
- * fdimf: (libc)Misc FP Arithmetic.
- * fdim: (libc)Misc FP Arithmetic.
- * fdiml: (libc)Misc FP Arithmetic.
- * FD_ISSET: (libc)Waiting for I/O.
- * fdopendir: (libc)Opening a Directory.
- * fdopen: (libc)Descriptors and Streams.
- * FD_SET: (libc)Waiting for I/O.
- * FD_SETSIZE: (libc)Waiting for I/O.
- * F_DUPFD: (libc)Duplicating Descriptors.
- * FD_ZERO: (libc)Waiting for I/O.
- * feclearexcept: (libc)Status bit operations.
- * fedisableexcept: (libc)Control Functions.
- * feenableexcept: (libc)Control Functions.
- * fegetenv: (libc)Control Functions.
- * fegetexceptflag: (libc)Status bit operations.
- * fegetexcept: (libc)Control Functions.
- * 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.
- * fesetexceptflag: (libc)Status bit operations.
- * fesetexcept: (libc)Status bit operations.
- * fesetmode: (libc)Control Functions.
- * fesetround: (libc)Rounding.
- * FE_SNANS_ALWAYS_SIGNAL: (libc)Infinity and NaN.
- * fetestexceptflag: (libc)Status bit operations.
- * fetestexcept: (libc)Status bit operations.
- * feupdateenv: (libc)Control Functions.
- * fflush: (libc)Flushing Buffers.
- * fflush_unlocked: (libc)Flushing Buffers.
- * fgetc: (libc)Character Input.
- * fgetc_unlocked: (libc)Character Input.
- * F_GETFD: (libc)Descriptor Flags.
- * F_GETFL: (libc)Getting File Status Flags.
- * fgetgrent: (libc)Scanning All Groups.
- * fgetgrent_r: (libc)Scanning All Groups.
- * F_GETLK: (libc)File Locks.
- * F_GETOWN: (libc)Interrupt Input.
- * 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.
- * FILENAME_MAX: (libc)Limits for Files.
- * fileno: (libc)Descriptors and Streams.
- * fileno_unlocked: (libc)Descriptors and Streams.
- * finitef: (libc)Floating Point Classes.
- * finite: (libc)Floating Point Classes.
- * finitel: (libc)Floating Point Classes.
- * __flbf: (libc)Controlling Buffering.
- * flockfile: (libc)Streams and Threads.
- * floorf: (libc)Rounding Functions.
- * floor: (libc)Rounding Functions.
- * floorl: (libc)Rounding Functions.
- * _flushlbf: (libc)Flushing Buffers.
- * FLUSHO: (libc)Local Modes.
- * fmaf: (libc)Misc FP Arithmetic.
- * fma: (libc)Misc FP Arithmetic.
- * fmal: (libc)Misc FP Arithmetic.
- * fmaxf: (libc)Misc FP Arithmetic.
- * fmax: (libc)Misc FP Arithmetic.
- * fmaxl: (libc)Misc FP Arithmetic.
- * fmaxmagf: (libc)Misc FP Arithmetic.
- * fmaxmag: (libc)Misc FP Arithmetic.
- * fmaxmagl: (libc)Misc FP Arithmetic.
- * fmemopen: (libc)String Streams.
- * fminf: (libc)Misc FP Arithmetic.
- * fmin: (libc)Misc FP Arithmetic.
- * fminl: (libc)Misc FP Arithmetic.
- * fminmagf: (libc)Misc FP Arithmetic.
- * fminmag: (libc)Misc FP Arithmetic.
- * fminmagl: (libc)Misc FP Arithmetic.
- * fmodf: (libc)Remainder Functions.
- * fmod: (libc)Remainder Functions.
- * fmodl: (libc)Remainder Functions.
- * fmtmsg: (libc)Printing Formatted Messages.
- * fnmatch: (libc)Wildcard Matching.
- * 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.
- * fopen64: (libc)Opening Streams.
- * fopencookie: (libc)Streams and Cookies.
- * fopen: (libc)Opening Streams.
- * FOPEN_MAX: (libc)Opening Streams.
- * fork: (libc)Creating a Process.
- * forkpty: (libc)Pseudo-Terminal Pairs.
- * fpathconf: (libc)Pathconf.
- * fpclassify: (libc)Floating Point Classes.
- * __fpending: (libc)Controlling Buffering.
- * FP_ILOGB0: (libc)Exponents and Logarithms.
- * FP_ILOGBNAN: (libc)Exponents and Logarithms.
- * FP_LLOGB0: (libc)Exponents and Logarithms.
- * FP_LLOGBNAN: (libc)Exponents and Logarithms.
- * fprintf: (libc)Formatted Output Functions.
- * __fpurge: (libc)Flushing Buffers.
- * 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.
- * __freadable: (libc)Opening Streams.
- * __freading: (libc)Opening Streams.
- * fread: (libc)Block Input/Output.
- * fread_unlocked: (libc)Block Input/Output.
- * free: (libc)Freeing after Malloc.
- * freopen64: (libc)Opening Streams.
- * freopen: (libc)Opening Streams.
- * frexpf: (libc)Normalization Functions.
- * frexp: (libc)Normalization Functions.
- * frexpl: (libc)Normalization Functions.
- * fromfpf: (libc)Rounding Functions.
- * fromfp: (libc)Rounding Functions.
- * fromfpl: (libc)Rounding Functions.
- * fromfpxf: (libc)Rounding Functions.
- * fromfpx: (libc)Rounding Functions.
- * fromfpxl: (libc)Rounding Functions.
- * fscanf: (libc)Formatted Input Functions.
- * fseek: (libc)File Positioning.
- * fseeko64: (libc)File Positioning.
- * fseeko: (libc)File Positioning.
- * F_SETFD: (libc)Descriptor Flags.
- * F_SETFL: (libc)Getting File Status Flags.
- * F_SETLK: (libc)File Locks.
- * F_SETLKW: (libc)File Locks.
- * __fsetlocking: (libc)Streams and Threads.
- * F_SETOWN: (libc)Interrupt Input.
- * fsetpos64: (libc)Portable Positioning.
- * fsetpos: (libc)Portable Positioning.
- * fstat64: (libc)Reading Attributes.
- * fstat: (libc)Reading Attributes.
- * 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.
- * futimes: (libc)File Times.
- * fwide: (libc)Streams and I18N.
- * fwprintf: (libc)Formatted Output Functions.
- * __fwritable: (libc)Opening Streams.
- * fwrite: (libc)Block Input/Output.
- * fwrite_unlocked: (libc)Block Input/Output.
- * __fwriting: (libc)Opening Streams.
- * fwscanf: (libc)Formatted Input Functions.
- * gammaf: (libc)Special Functions.
- * gamma: (libc)Special Functions.
- * gammal: (libc)Special Functions.
- * __gconv_end_fct: (libc)glibc iconv Implementation.
- * __gconv_fct: (libc)glibc iconv Implementation.
- * __gconv_init_fct: (libc)glibc iconv Implementation.
- * gcvt: (libc)System V Number Conversion.
- * getauxval: (libc)Auxiliary Vector.
- * get_avphys_pages: (libc)Query Memory Parameters.
- * getchar: (libc)Character Input.
- * getchar_unlocked: (libc)Character Input.
- * getc: (libc)Character Input.
- * getcontext: (libc)System V contexts.
- * getc_unlocked: (libc)Character Input.
- * get_current_dir_name: (libc)Working Directory.
- * getcwd: (libc)Working Directory.
- * getdate: (libc)General Time String Parsing.
- * getdate_r: (libc)General Time String Parsing.
- * getdelim: (libc)Line Input.
- * getdomainnname: (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.
- * get_nprocs_conf: (libc)Processor Resources.
- * get_nprocs: (libc)Processor Resources.
- * 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.
- * getpayloadf: (libc)FP Bit Twiddling.
- * getpayload: (libc)FP Bit Twiddling.
- * getpayloadl: (libc)FP Bit Twiddling.
- * getpeername: (libc)Who is Connected.
- * getpgid: (libc)Process Group Functions.
- * getpgrp: (libc)Process Group Functions.
- * get_phys_pages: (libc)Query Memory Parameters.
- * 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.
- * getservbyname: (libc)Services Database.
- * getservbyport: (libc)Services Database.
- * getservent: (libc)Services Database.
- * getsid: (libc)Process Group Functions.
- * gets: (libc)Line Input.
- * getsockname: (libc)Reading Address.
- * getsockopt: (libc)Socket Option Functions.
- * getsubopt: (libc)Suboptions.
- * gettext: (libc)Translation with gettext.
- * gettimeofday: (libc)High-Resolution Calendar.
- * 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.
- * getwchar: (libc)Character Input.
- * getwchar_unlocked: (libc)Character Input.
- * getwc: (libc)Character Input.
- * getwc_unlocked: (libc)Character Input.
- * getwd: (libc)Working Directory.
- * getw: (libc)Character Input.
- * glob64: (libc)Calling Glob.
- * globfree64: (libc)More Flags for Globbing.
- * globfree: (libc)More Flags for Globbing.
- * glob: (libc)Calling Glob.
- * 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.
- * HUGE_VALF: (libc)Math Error Reporting.
- * HUGE_VAL: (libc)Math Error Reporting.
- * HUGE_VALL: (libc)Math Error Reporting.
- * HUPCL: (libc)Control Modes.
- * hypotf: (libc)Exponents and Logarithms.
- * hypot: (libc)Exponents and Logarithms.
- * hypotl: (libc)Exponents and Logarithms.
- * ICANON: (libc)Local Modes.
- * iconv_close: (libc)Generic Conversion Interface.
- * iconv: (libc)Generic Conversion Interface.
- * iconv_open: (libc)Generic Conversion Interface.
- * ICRNL: (libc)Input Modes.
- * IEXTEN: (libc)Local Modes.
- * if_freenameindex: (libc)Interface Naming.
- * if_indextoname: (libc)Interface Naming.
- * if_nameindex: (libc)Interface Naming.
- * if_nametoindex: (libc)Interface Naming.
- * IFNAMSIZ: (libc)Interface Naming.
- * IFTODT: (libc)Directory Entries.
- * IGNBRK: (libc)Input Modes.
- * IGNCR: (libc)Input Modes.
- * IGNPAR: (libc)Input Modes.
- * I: (libc)Complex Numbers.
- * ilogbf: (libc)Exponents and Logarithms.
- * ilogb: (libc)Exponents and Logarithms.
- * ilogbl: (libc)Exponents and Logarithms.
- * _Imaginary_I: (libc)Complex Numbers.
- * imaxabs: (libc)Absolute Value.
- * IMAXBEL: (libc)Input Modes.
- * imaxdiv: (libc)Integer Division.
- * in6addr_any: (libc)Host Address Data Type.
- * in6addr_loopback: (libc)Host Address Data Type.
- * 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.
- * 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.
- * INFINITY: (libc)Infinity and NaN.
- * initgroups: (libc)Setting Groups.
- * initstate: (libc)BSD Random.
- * initstate_r: (libc)BSD Random.
- * INLCR: (libc)Input Modes.
- * innetgr: (libc)Netgroup Membership.
- * INPCK: (libc)Input Modes.
- * ioctl: (libc)IOCTLs.
- * _IOFBF: (libc)Controlling Buffering.
- * _IOLBF: (libc)Controlling Buffering.
- * _IONBF: (libc)Controlling Buffering.
- * IPPORT_RESERVED: (libc)Ports.
- * IPPORT_USERRESERVED: (libc)Ports.
- * 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.
- * isgreaterequal: (libc)FP Comparison Functions.
- * isgreater: (libc)FP Comparison Functions.
- * ISIG: (libc)Local Modes.
- * isinff: (libc)Floating Point Classes.
- * isinf: (libc)Floating Point Classes.
- * isinfl: (libc)Floating Point Classes.
- * islessequal: (libc)FP Comparison Functions.
- * islessgreater: (libc)FP Comparison Functions.
- * isless: (libc)FP Comparison Functions.
- * islower: (libc)Classification of Characters.
- * isnanf: (libc)Floating Point Classes.
- * isnan: (libc)Floating Point Classes.
- * isnan: (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.
- * ISTRIP: (libc)Input Modes.
- * 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.
- * IXANY: (libc)Input Modes.
- * IXOFF: (libc)Input Modes.
- * IXON: (libc)Input Modes.
- * j0f: (libc)Special Functions.
- * j0: (libc)Special Functions.
- * j0l: (libc)Special Functions.
- * j1f: (libc)Special Functions.
- * j1: (libc)Special Functions.
- * j1l: (libc)Special Functions.
- * jnf: (libc)Special Functions.
- * jn: (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.
- * L_ctermid: (libc)Identifying the Terminal.
- * L_cuserid: (libc)Who Logged In.
- * ldexpf: (libc)Normalization Functions.
- * ldexp: (libc)Normalization Functions.
- * ldexpl: (libc)Normalization Functions.
- * ldiv: (libc)Integer Division.
- * lfind: (libc)Array Search Function.
- * lgammaf: (libc)Special Functions.
- * lgammaf_r: (libc)Special Functions.
- * lgamma: (libc)Special Functions.
- * lgammal: (libc)Special Functions.
- * lgammal_r: (libc)Special Functions.
- * lgamma_r: (libc)Special Functions.
- * LINE_MAX: (libc)Utility Limits.
- * link: (libc)Hard Links.
- * LINK_MAX: (libc)Limits for Files.
- * lio_listio64: (libc)Asynchronous Reads/Writes.
- * lio_listio: (libc)Asynchronous Reads/Writes.
- * listen: (libc)Listening.
- * llabs: (libc)Absolute Value.
- * lldiv: (libc)Integer Division.
- * llogbf: (libc)Exponents and Logarithms.
- * llogb: (libc)Exponents and Logarithms.
- * llogbl: (libc)Exponents and Logarithms.
- * llrintf: (libc)Rounding Functions.
- * llrint: (libc)Rounding Functions.
- * llrintl: (libc)Rounding Functions.
- * llroundf: (libc)Rounding Functions.
- * llround: (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.
- * log10f: (libc)Exponents and Logarithms.
- * log10: (libc)Exponents and Logarithms.
- * log10l: (libc)Exponents and Logarithms.
- * log1pf: (libc)Exponents and Logarithms.
- * log1p: (libc)Exponents and Logarithms.
- * log1pl: (libc)Exponents and Logarithms.
- * log2f: (libc)Exponents and Logarithms.
- * log2: (libc)Exponents and Logarithms.
- * log2l: (libc)Exponents and Logarithms.
- * logbf: (libc)Exponents and Logarithms.
- * logb: (libc)Exponents and Logarithms.
- * logbl: (libc)Exponents and Logarithms.
- * logf: (libc)Exponents and Logarithms.
- * login: (libc)Logging In and Out.
- * login_tty: (libc)Logging In and Out.
- * log: (libc)Exponents and Logarithms.
- * logl: (libc)Exponents and Logarithms.
- * logout: (libc)Logging In and Out.
- * logwtmp: (libc)Logging In and Out.
- * longjmp: (libc)Non-Local Details.
- * lrand48: (libc)SVID Random.
- * lrand48_r: (libc)SVID Random.
- * lrintf: (libc)Rounding Functions.
- * lrint: (libc)Rounding Functions.
- * lrintl: (libc)Rounding Functions.
- * lroundf: (libc)Rounding Functions.
- * lround: (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.
- * L_tmpnam: (libc)Temporary Files.
- * lutimes: (libc)File Times.
- * madvise: (libc)Memory-mapped I/O.
- * makecontext: (libc)System V contexts.
- * mallinfo: (libc)Statistics of Malloc.
- * malloc: (libc)Basic Allocation.
- * mallopt: (libc)Malloc Tunable Parameters.
- * MAX_CANON: (libc)Limits for Files.
- * MAX_INPUT: (libc)Limits for Files.
- * MAXNAMLEN: (libc)Limits for Files.
- * MAXSYMLINKS: (libc)Symbolic Links.
- * MB_CUR_MAX: (libc)Selecting the Conversion.
- * mblen: (libc)Non-reentrant Character Conversion.
- * MB_LEN_MAX: (libc)Selecting the 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.
- * MDMBUF: (libc)Control Modes.
- * memalign: (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.
- * memfrob: (libc)Trivial Encryption.
- * 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.
- * mkdir: (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.
- * mlockall: (libc)Page Lock Functions.
- * mlock: (libc)Page Lock Functions.
- * mmap64: (libc)Memory-mapped I/O.
- * mmap: (libc)Memory-mapped I/O.
- * modff: (libc)Rounding Functions.
- * modf: (libc)Rounding Functions.
- * modfl: (libc)Rounding Functions.
- * mount: (libc)Mount-Unmount-Remount.
- * mprobe: (libc)Heap Consistency Checking.
- * mrand48: (libc)SVID Random.
- * mrand48_r: (libc)SVID Random.
- * mremap: (libc)Memory-mapped I/O.
- * MSG_DONTROUTE: (libc)Socket Data Options.
- * MSG_OOB: (libc)Socket Data Options.
- * MSG_PEEK: (libc)Socket Data Options.
- * msync: (libc)Memory-mapped I/O.
- * mtrace: (libc)Tracing malloc.
- * munlockall: (libc)Page Lock Functions.
- * munlock: (libc)Page Lock Functions.
- * munmap: (libc)Memory-mapped I/O.
- * muntrace: (libc)Tracing malloc.
- * NAME_MAX: (libc)Limits for Files.
- * nanf: (libc)FP Bit Twiddling.
- * nan: (libc)FP Bit Twiddling.
- * NAN: (libc)Infinity and NaN.
- * nanl: (libc)FP Bit Twiddling.
- * nanosleep: (libc)Sleeping.
- * NCCS: (libc)Mode Data Types.
- * nearbyintf: (libc)Rounding Functions.
- * nearbyint: (libc)Rounding Functions.
- * nearbyintl: (libc)Rounding Functions.
- * nextafterf: (libc)FP Bit Twiddling.
- * nextafter: (libc)FP Bit Twiddling.
- * nextafterl: (libc)FP Bit Twiddling.
- * nextdownf: (libc)FP Bit Twiddling.
- * nextdown: (libc)FP Bit Twiddling.
- * nextdownl: (libc)FP Bit Twiddling.
- * nexttowardf: (libc)FP Bit Twiddling.
- * nexttoward: (libc)FP Bit Twiddling.
- * nexttowardl: (libc)FP Bit Twiddling.
- * nextupf: (libc)FP Bit Twiddling.
- * nextup: (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.
- * NGROUPS_MAX: (libc)General Limits.
- * nice: (libc)Traditional Scheduling Functions.
- * nl_langinfo: (libc)The Elegant and Fast Way.
- * NOFLSH: (libc)Local Modes.
- * NOKERNINFO: (libc)Local Modes.
- * nrand48: (libc)SVID Random.
- * nrand48_r: (libc)SVID Random.
- * NSIG: (libc)Standard Signals.
- * ntohl: (libc)Byte Order.
- * ntohs: (libc)Byte Order.
- * ntp_adjtime: (libc)High Accuracy Clock.
- * ntp_gettime: (libc)High Accuracy Clock.
- * NULL: (libc)Null Pointer Constant.
- * O_ACCMODE: (libc)Access Modes.
- * O_APPEND: (libc)Operating Modes.
- * O_ASYNC: (libc)Operating Modes.
- * obstack_1grow_fast: (libc)Extra Fast Growing.
- * obstack_1grow: (libc)Growing Objects.
- * obstack_alignment_mask: (libc)Obstacks Data Alignment.
- * obstack_alloc: (libc)Allocation in an Obstack.
- * obstack_base: (libc)Status of an Obstack.
- * obstack_blank_fast: (libc)Extra Fast Growing.
- * obstack_blank: (libc)Growing Objects.
- * 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_fast: (libc)Extra Fast Growing.
- * obstack_int_grow: (libc)Growing Objects.
- * 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_fast: (libc)Extra Fast Growing.
- * obstack_ptr_grow: (libc)Growing Objects.
- * obstack_room: (libc)Extra Fast Growing.
- * obstack_vprintf: (libc)Variable Arguments Output.
- * O_CREAT: (libc)Open-time Flags.
- * O_EXCL: (libc)Open-time Flags.
- * O_EXEC: (libc)Access Modes.
- * O_EXLOCK: (libc)Open-time Flags.
- * offsetof: (libc)Structure Measurement.
- * O_FSYNC: (libc)Operating Modes.
- * O_IGNORE_CTTY: (libc)Open-time Flags.
- * O_NDELAY: (libc)Operating Modes.
- * on_exit: (libc)Cleanups on Exit.
- * ONLCR: (libc)Output Modes.
- * O_NOATIME: (libc)Operating Modes.
- * O_NOCTTY: (libc)Open-time Flags.
- * ONOEOT: (libc)Output Modes.
- * O_NOLINK: (libc)Open-time Flags.
- * O_NONBLOCK: (libc)Open-time Flags.
- * O_NONBLOCK: (libc)Operating Modes.
- * O_NOTRANS: (libc)Open-time Flags.
- * open64: (libc)Opening and Closing Files.
- * opendir: (libc)Opening a Directory.
- * open: (libc)Opening and Closing Files.
- * openlog: (libc)openlog.
- * OPEN_MAX: (libc)General Limits.
- * open_memstream: (libc)String Streams.
- * openpty: (libc)Pseudo-Terminal Pairs.
- * OPOST: (libc)Output 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_TRUNC: (libc)Open-time Flags.
- * O_WRITE: (libc)Access Modes.
- * O_WRONLY: (libc)Access Modes.
- * OXTABS: (libc)Output Modes.
- * PA_FLAG_MASK: (libc)Parsing a Template String.
- * PARENB: (libc)Control Modes.
- * PARMRK: (libc)Input Modes.
- * PARODD: (libc)Control Modes.
- * parse_printf_format: (libc)Parsing a Template String.
- * pathconf: (libc)Pathconf.
- * PATH_MAX: (libc)Limits for Files.
- * _PATH_UTMP: (libc)Manipulating the Database.
- * _PATH_WTMP: (libc)Manipulating the Database.
- * pause: (libc)Using Pause.
- * pclose: (libc)Pipe to a Subprocess.
- * PENDIN: (libc)Local Modes.
- * perror: (libc)Error Messages.
- * 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.
- * pipe: (libc)Creating a Pipe.
- * popen: (libc)Pipe to a Subprocess.
- * _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_fallocate64: (libc)Storage Allocation.
- * posix_fallocate: (libc)Storage Allocation.
- * _POSIX_JOB_CONTROL: (libc)System Options.
- * posix_memalign: (libc)Aligned Memory Blocks.
- * _POSIX_NO_TRUNC: (libc)Options for Files.
- * _POSIX_SAVED_IDS: (libc)System Options.
- * _POSIX_VDISABLE: (libc)Options for Files.
- * _POSIX_VERSION: (libc)Version Supported.
- * pow10f: (libc)Exponents and Logarithms.
- * pow10: (libc)Exponents and Logarithms.
- * pow10l: (libc)Exponents and Logarithms.
- * powf: (libc)Exponents and Logarithms.
- * pow: (libc)Exponents and Logarithms.
- * powl: (libc)Exponents and Logarithms.
- * __ppc_get_timebase_freq: (libc)PowerPC.
- * __ppc_get_timebase: (libc)PowerPC.
- * __ppc_mdoio: (libc)PowerPC.
- * __ppc_mdoom: (libc)PowerPC.
- * __ppc_set_ppr_low: (libc)PowerPC.
- * __ppc_set_ppr_med_high: (libc)PowerPC.
- * __ppc_set_ppr_med: (libc)PowerPC.
- * __ppc_set_ppr_med_low: (libc)PowerPC.
- * __ppc_set_ppr_very_low: (libc)PowerPC.
- * __ppc_yield: (libc)PowerPC.
- * pread64: (libc)I/O Primitives.
- * pread: (libc)I/O Primitives.
- * printf: (libc)Formatted Output Functions.
- * printf_size_info: (libc)Predefined Printf Handlers.
- * printf_size: (libc)Predefined Printf Handlers.
- * psignal: (libc)Signal Messages.
- * pthread_getattr_default_np: (libc)Default Thread Attributes.
- * pthread_getspecific: (libc)Thread-specific Data.
- * pthread_key_create: (libc)Thread-specific Data.
- * pthread_key_delete: (libc)Thread-specific Data.
- * pthread_setattr_default_np: (libc)Default Thread Attributes.
- * pthread_setspecific: (libc)Thread-specific Data.
- * P_tmpdir: (libc)Temporary Files.
- * ptsname: (libc)Allocation.
- * ptsname_r: (libc)Allocation.
- * putchar: (libc)Simple Output.
- * putchar_unlocked: (libc)Simple Output.
- * putc: (libc)Simple Output.
- * putc_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.
- * putwchar: (libc)Simple Output.
- * putwchar_unlocked: (libc)Simple Output.
- * putwc: (libc)Simple Output.
- * putwc_unlocked: (libc)Simple Output.
- * putw: (libc)Simple Output.
- * pwrite64: (libc)I/O Primitives.
- * pwrite: (libc)I/O Primitives.
- * 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_MAX: (libc)ISO Random.
- * random: (libc)BSD Random.
- * random_r: (libc)BSD Random.
- * rand_r: (libc)ISO Random.
- * rawmemchr: (libc)Search Functions.
- * readdir64: (libc)Reading/Closing Directory.
- * readdir64_r: (libc)Reading/Closing Directory.
- * readdir: (libc)Reading/Closing Directory.
- * readdir_r: (libc)Reading/Closing Directory.
- * read: (libc)I/O Primitives.
- * readlink: (libc)Symbolic Links.
- * readv: (libc)Scatter-Gather.
- * realloc: (libc)Changing Block Size.
- * realpath: (libc)Symbolic Links.
- * recvfrom: (libc)Receiving Datagrams.
- * recv: (libc)Receiving Data.
- * recvmsg: (libc)Receiving Datagrams.
- * RE_DUP_MAX: (libc)General Limits.
- * 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.
- * remainderf: (libc)Remainder Functions.
- * remainder: (libc)Remainder Functions.
- * remainderl: (libc)Remainder Functions.
- * remove: (libc)Deleting Files.
- * rename: (libc)Renaming Files.
- * rewinddir: (libc)Random Access Directory.
- * rewind: (libc)File Positioning.
- * rindex: (libc)Search Functions.
- * rintf: (libc)Rounding Functions.
- * rint: (libc)Rounding Functions.
- * rintl: (libc)Rounding Functions.
- * RLIM_INFINITY: (libc)Limits on Resources.
- * rmdir: (libc)Deleting Files.
- * R_OK: (libc)Testing File Access.
- * roundevenf: (libc)Rounding Functions.
- * roundeven: (libc)Rounding Functions.
- * roundevenl: (libc)Rounding Functions.
- * roundf: (libc)Rounding Functions.
- * round: (libc)Rounding Functions.
- * roundl: (libc)Rounding Functions.
- * rpmatch: (libc)Yes-or-No Questions.
- * SA_NOCLDSTOP: (libc)Flags for Sigaction.
- * SA_ONSTACK: (libc)Flags for Sigaction.
- * SA_RESTART: (libc)Flags for Sigaction.
- * sbrk: (libc)Resizing the Data Segment.
- * scalbf: (libc)Normalization Functions.
- * scalb: (libc)Normalization Functions.
- * scalbl: (libc)Normalization Functions.
- * scalblnf: (libc)Normalization Functions.
- * scalbln: (libc)Normalization Functions.
- * scalblnl: (libc)Normalization Functions.
- * scalbnf: (libc)Normalization Functions.
- * scalbn: (libc)Normalization Functions.
- * scalbnl: (libc)Normalization Functions.
- * scandir64: (libc)Scanning Directory Content.
- * scandir: (libc)Scanning Directory Content.
- * scanf: (libc)Formatted Input Functions.
- * sched_getaffinity: (libc)CPU Affinity.
- * sched_getparam: (libc)Basic Scheduling Functions.
- * sched_get_priority_max: (libc)Basic Scheduling Functions.
- * sched_get_priority_min: (libc)Basic Scheduling Functions.
- * sched_getscheduler: (libc)Basic Scheduling Functions.
- * sched_rr_get_interval: (libc)Basic Scheduling Functions.
- * sched_setaffinity: (libc)CPU Affinity.
- * 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.
- * SEEK_CUR: (libc)File Positioning.
- * seekdir: (libc)Random Access Directory.
- * SEEK_END: (libc)File Positioning.
- * SEEK_SET: (libc)File Positioning.
- * select: (libc)Waiting for I/O.
- * sem_close: (libc)Semaphores.
- * semctl: (libc)Semaphores.
- * sem_destroy: (libc)Semaphores.
- * semget: (libc)Semaphores.
- * sem_getvalue: (libc)Semaphores.
- * sem_init: (libc)Semaphores.
- * sem_open: (libc)Semaphores.
- * semop: (libc)Semaphores.
- * sem_post: (libc)Semaphores.
- * semtimedop: (libc)Semaphores.
- * sem_timedwait: (libc)Semaphores.
- * sem_trywait: (libc)Semaphores.
- * sem_unlink: (libc)Semaphores.
- * sem_wait: (libc)Semaphores.
- * send: (libc)Sending Data.
- * sendmsg: (libc)Receiving Datagrams.
- * sendto: (libc)Sending Datagrams.
- * setbuffer: (libc)Controlling Buffering.
- * setbuf: (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.
- * setkey: (libc)DES Encryption.
- * setkey_r: (libc)DES Encryption.
- * setlinebuf: (libc)Controlling Buffering.
- * setlocale: (libc)Setting the Locale.
- * setlogmask: (libc)setlogmask.
- * setmntent: (libc)mtab.
- * setnetent: (libc)Networks Database.
- * setnetgrent: (libc)Lookup Netgroup.
- * setpayloadf: (libc)FP Bit Twiddling.
- * setpayload: (libc)FP Bit Twiddling.
- * setpayloadl: (libc)FP Bit Twiddling.
- * setpayloadsigf: (libc)FP Bit Twiddling.
- * setpayloadsig: (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)High-Resolution Calendar.
- * 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.
- * S_IFMT: (libc)Testing File Type.
- * SIGABRT: (libc)Program Error Signals.
- * sigaction: (libc)Advanced Signal Handling.
- * sigaddset: (libc)Signal Sets.
- * SIGALRM: (libc)Alarm Signals.
- * sigaltstack: (libc)Signal Stack.
- * sigblock: (libc)BSD Signal Handling.
- * SIGBUS: (libc)Program Error Signals.
- * SIGCHLD: (libc)Job Control Signals.
- * SIGCLD: (libc)Job Control Signals.
- * SIGCONT: (libc)Job Control Signals.
- * sigdelset: (libc)Signal Sets.
- * sigemptyset: (libc)Signal Sets.
- * SIGEMT: (libc)Program Error Signals.
- * SIG_ERR: (libc)Basic Signal Handling.
- * sigfillset: (libc)Signal Sets.
- * SIGFPE: (libc)Program Error Signals.
- * SIGHUP: (libc)Termination Signals.
- * SIGILL: (libc)Program Error Signals.
- * SIGINFO: (libc)Miscellaneous Signals.
- * siginterrupt: (libc)BSD Signal Handling.
- * SIGINT: (libc)Termination Signals.
- * SIGIO: (libc)Asynchronous I/O Signals.
- * SIGIOT: (libc)Program Error Signals.
- * sigismember: (libc)Signal Sets.
- * SIGKILL: (libc)Termination Signals.
- * siglongjmp: (libc)Non-Local Exits and Signals.
- * SIGLOST: (libc)Operation Error Signals.
- * sigmask: (libc)BSD Signal Handling.
- * signal: (libc)Basic Signal Handling.
- * signbit: (libc)FP Bit Twiddling.
- * significandf: (libc)Normalization Functions.
- * significand: (libc)Normalization Functions.
- * significandl: (libc)Normalization Functions.
- * sigpause: (libc)BSD Signal Handling.
- * sigpending: (libc)Checking for Pending Signals.
- * SIGPIPE: (libc)Operation Error Signals.
- * SIGPOLL: (libc)Asynchronous I/O Signals.
- * sigprocmask: (libc)Process Signal Mask.
- * SIGPROF: (libc)Alarm Signals.
- * SIGQUIT: (libc)Termination Signals.
- * SIGSEGV: (libc)Program Error Signals.
- * sigsetjmp: (libc)Non-Local Exits and Signals.
- * sigsetmask: (libc)BSD Signal Handling.
- * sigstack: (libc)Signal Stack.
- * SIGSTOP: (libc)Job Control Signals.
- * sigsuspend: (libc)Sigsuspend.
- * 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.
- * sincosf: (libc)Trig Functions.
- * sincos: (libc)Trig Functions.
- * sincosl: (libc)Trig Functions.
- * sinf: (libc)Trig Functions.
- * sinhf: (libc)Hyperbolic Functions.
- * sinh: (libc)Hyperbolic Functions.
- * sinhl: (libc)Hyperbolic Functions.
- * sin: (libc)Trig Functions.
- * sinl: (libc)Trig Functions.
- * 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.
- * sleep: (libc)Sleeping.
- * SNANF: (libc)Infinity and NaN.
- * SNAN: (libc)Infinity and NaN.
- * SNANL: (libc)Infinity and NaN.
- * snprintf: (libc)Formatted Output Functions.
- * SOCK_DGRAM: (libc)Communication Styles.
- * socket: (libc)Creating a Socket.
- * socketpair: (libc)Socket Pairs.
- * 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.
- * sprintf: (libc)Formatted Output Functions.
- * sqrtf: (libc)Exponents and Logarithms.
- * sqrt: (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.
- * SSIZE_MAX: (libc)General Limits.
- * stat64: (libc)Reading Attributes.
- * stat: (libc)Reading Attributes.
- * stime: (libc)Simple Calendar 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.
- * strdupa: (libc)Copying Strings and Arrays.
- * strdup: (libc)Copying Strings and Arrays.
- * STREAM_MAX: (libc)General Limits.
- * strerror: (libc)Error Messages.
- * strerror_r: (libc)Error Messages.
- * strfmon: (libc)Formatting Numbers.
- * strfromd: (libc)Printing of Floats.
- * strfromf: (libc)Printing of Floats.
- * strfroml: (libc)Printing of Floats.
- * strfry: (libc)strfry.
- * strftime: (libc)Formatting Calendar Time.
- * strlen: (libc)String Length.
- * strncasecmp: (libc)String/Array Comparison.
- * strncat: (libc)Truncating Strings.
- * strncmp: (libc)String/Array Comparison.
- * strncpy: (libc)Truncating Strings.
- * strndupa: (libc)Truncating Strings.
- * strndup: (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.
- * strtoimax: (libc)Parsing of Integers.
- * strtok: (libc)Finding Tokens in a String.
- * strtok_r: (libc)Finding Tokens in a String.
- * strtold: (libc)Parsing of Floats.
- * strtol: (libc)Parsing of Integers.
- * 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.
- * S_TYPEISMQ: (libc)Testing File Type.
- * S_TYPEISSEM: (libc)Testing File Type.
- * S_TYPEISSHM: (libc)Testing File Type.
- * SUN_LEN: (libc)Local Namespace Details.
- * 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.
- * sysctl: (libc)System Parameters.
- * syslog: (libc)syslog; vsyslog.
- * system: (libc)Running a Command.
- * sysv_signal: (libc)Basic Signal Handling.
- * tanf: (libc)Trig Functions.
- * tanhf: (libc)Hyperbolic Functions.
- * tanh: (libc)Hyperbolic Functions.
- * tanhl: (libc)Hyperbolic Functions.
- * tan: (libc)Trig Functions.
- * tanl: (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.
- * tgammaf: (libc)Special Functions.
- * tgamma: (libc)Special Functions.
- * tgammal: (libc)Special Functions.
- * timegm: (libc)Broken-down Time.
- * time: (libc)Simple Calendar Time.
- * timelocal: (libc)Broken-down Time.
- * times: (libc)Processor Time.
- * tmpfile64: (libc)Temporary Files.
- * tmpfile: (libc)Temporary Files.
- * TMP_MAX: (libc)Temporary Files.
- * tmpnam: (libc)Temporary Files.
- * tmpnam_r: (libc)Temporary Files.
- * toascii: (libc)Case Conversion.
- * _tolower: (libc)Case Conversion.
- * tolower: (libc)Case Conversion.
- * TOSTOP: (libc)Local Modes.
- * totalorderf: (libc)FP Comparison Functions.
- * totalorder: (libc)FP Comparison Functions.
- * totalorderl: (libc)FP Comparison Functions.
- * totalordermagf: (libc)FP Comparison Functions.
- * totalordermag: (libc)FP Comparison Functions.
- * totalordermagl: (libc)FP Comparison Functions.
- * _toupper: (libc)Case Conversion.
- * toupper: (libc)Case Conversion.
- * towctrans: (libc)Wide Character Case Conversion.
- * towlower: (libc)Wide Character Case Conversion.
- * towupper: (libc)Wide Character Case Conversion.
- * truncate64: (libc)File Size.
- * truncate: (libc)File Size.
- * truncf: (libc)Rounding Functions.
- * trunc: (libc)Rounding Functions.
- * truncl: (libc)Rounding Functions.
- * tsearch: (libc)Tree Search Function.
- * ttyname: (libc)Is It a Terminal.
- * ttyname_r: (libc)Is It a Terminal.
- * twalk: (libc)Tree Search Function.
- * TZNAME_MAX: (libc)General Limits.
- * tzset: (libc)Time Zone Functions.
- * ufromfpf: (libc)Rounding Functions.
- * ufromfp: (libc)Rounding Functions.
- * ufromfpl: (libc)Rounding Functions.
- * ufromfpxf: (libc)Rounding Functions.
- * ufromfpx: (libc)Rounding Functions.
- * ufromfpxl: (libc)Rounding Functions.
- * ulimit: (libc)Limits on Resources.
- * umask: (libc)Setting Permissions.
- * 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.
- * unlockpt: (libc)Allocation.
- * unsetenv: (libc)Environment Access.
- * updwtmp: (libc)Manipulating the Database.
- * utime: (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_copy: (libc)Argument Macros.
- * va_end: (libc)Argument Macros.
- * valloc: (libc)Aligned Memory Blocks.
- * vasprintf: (libc)Variable Arguments Output.
- * va_start: (libc)Argument Macros.
- * VDISCARD: (libc)Other Special.
- * VDSUSP: (libc)Signal Characters.
- * VEOF: (libc)Editing Characters.
- * VEOL2: (libc)Editing Characters.
- * VEOL: (libc)Editing Characters.
- * VERASE: (libc)Editing Characters.
- * 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.
- * VINTR: (libc)Signal Characters.
- * VKILL: (libc)Editing Characters.
- * vlimit: (libc)Limits on Resources.
- * VLNEXT: (libc)Other Special.
- * VMIN: (libc)Noncanonical Input.
- * vprintf: (libc)Variable Arguments Output.
- * VQUIT: (libc)Signal Characters.
- * VREPRINT: (libc)Editing Characters.
- * vscanf: (libc)Variable Arguments Input.
- * vsnprintf: (libc)Variable Arguments Output.
- * vsprintf: (libc)Variable Arguments Output.
- * vsscanf: (libc)Variable Arguments Input.
- * VSTART: (libc)Start/Stop Characters.
- * VSTATUS: (libc)Other Special.
- * VSTOP: (libc)Start/Stop Characters.
- * VSUSP: (libc)Signal Characters.
- * vswprintf: (libc)Variable Arguments Output.
- * vswscanf: (libc)Variable Arguments Input.
- * vsyslog: (libc)syslog; vsyslog.
- * VTIME: (libc)Noncanonical Input.
- * vtimes: (libc)Resource Usage.
- * vwarn: (libc)Error Messages.
- * vwarnx: (libc)Error Messages.
- * VWERASE: (libc)Editing Characters.
- * 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.
- * WCHAR_MAX: (libc)Extended Char Intro.
- * WCHAR_MIN: (libc)Extended Char Intro.
- * WCOREDUMP: (libc)Process Completion Status.
- * 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.
- * 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.
- * wcstoimax: (libc)Parsing of Integers.
- * wcstok: (libc)Finding Tokens in a String.
- * wcstold: (libc)Parsing of Floats.
- * wcstol: (libc)Parsing of Integers.
- * 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.
- * 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.
- * 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.
- * W_OK: (libc)Testing File Access.
- * 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.
- * WSTOPSIG: (libc)Process Completion Status.
- * WTERMSIG: (libc)Process Completion Status.
- * X_OK: (libc)Testing File Access.
- * y0f: (libc)Special Functions.
- * y0: (libc)Special Functions.
- * y0l: (libc)Special Functions.
- * y1f: (libc)Special Functions.
- * y1: (libc)Special Functions.
- * y1l: (libc)Special Functions.
- * ynf: (libc)Special Functions.
- * yn: (libc)Special Functions.
- * ynl: (libc)Special Functions.
- END-INFO-DIR-ENTRY
- File: libc.info, Node: Ports, Next: Services Database, Prev: Host Addresses, Up: Internet Namespace
- 16.6.3 Internet Ports
- ---------------------
- A socket address in the Internet namespace consists of a machine’s
- Internet address plus a "port number" which distinguishes the sockets on
- a given machine (for a given protocol). Port numbers range from 0 to
- 65,535.
- Port numbers less than ‘IPPORT_RESERVED’ are reserved for standard
- servers, such as ‘finger’ and ‘telnet’. There is a database that keeps
- track of these, and you can use the ‘getservbyname’ function to map a
- service name onto a port number; see *note Services Database::.
- If you write a server that is not one of the standard ones defined in
- the database, you must choose a port number for it. Use a number
- greater than ‘IPPORT_USERRESERVED’; such numbers are reserved for
- servers and won’t ever be generated automatically by the system.
- Avoiding conflicts with servers being run by other users is up to you.
- When you use a socket without specifying its address, the system
- generates a port number for it. This number is between
- ‘IPPORT_RESERVED’ and ‘IPPORT_USERRESERVED’.
- On the Internet, it is actually legitimate to have two different
- sockets with the same port number, as long as they never both try to
- communicate with the same socket address (host address plus port
- number). You shouldn’t duplicate a port number except in special
- circumstances where a higher-level protocol requires it. Normally, the
- system won’t let you do it; ‘bind’ normally insists on distinct port
- numbers. To reuse a port number, you must set the socket option
- ‘SO_REUSEADDR’. *Note Socket-Level Options::.
- These macros are defined in the header file ‘netinet/in.h’.
- -- Macro: int IPPORT_RESERVED
- Port numbers less than ‘IPPORT_RESERVED’ are reserved for superuser
- use.
- -- Macro: int IPPORT_USERRESERVED
- Port numbers greater than or equal to ‘IPPORT_USERRESERVED’ are
- reserved for explicit use; they will never be allocated
- automatically.
- File: libc.info, Node: Services Database, Next: Byte Order, Prev: Ports, Up: Internet Namespace
- 16.6.4 The Services Database
- ----------------------------
- The database that keeps track of “well-known” services is usually either
- the file ‘/etc/services’ or an equivalent from a name server. You can
- use these utilities, declared in ‘netdb.h’, to access the services
- database.
- -- Data Type: struct servent
- This data type holds information about entries from the services
- database. It has the following members:
- ‘char *s_name’
- This is the “official” name of the service.
- ‘char **s_aliases’
- These are alternate names for the service, represented as an
- array of strings. A null pointer terminates the array.
- ‘int s_port’
- This is the port number for the service. Port numbers are
- given in network byte order; see *note Byte Order::.
- ‘char *s_proto’
- This is the name of the protocol to use with this service.
- *Note Protocols Database::.
- To get information about a particular service, use the
- ‘getservbyname’ or ‘getservbyport’ functions. The information is
- returned in a statically-allocated structure; you must copy the
- information if you need to save it across calls.
- -- Function: struct servent * getservbyname (const char *NAME, const
- char *PROTO)
- Preliminary: | MT-Unsafe race:servbyname locale | AS-Unsafe dlopen
- plugin heap lock | AC-Unsafe corrupt lock fd mem | *Note POSIX
- Safety Concepts::.
- The ‘getservbyname’ function returns information about the service
- named NAME using protocol PROTO. If it can’t find such a service,
- it returns a null pointer.
- This function is useful for servers as well as for clients; servers
- use it to determine which port they should listen on (*note
- Listening::).
- -- Function: struct servent * getservbyport (int PORT, const char
- *PROTO)
- Preliminary: | MT-Unsafe race:servbyport locale | AS-Unsafe dlopen
- plugin heap lock | AC-Unsafe corrupt lock fd mem | *Note POSIX
- Safety Concepts::.
- The ‘getservbyport’ function returns information about the service
- at port PORT using protocol PROTO. If it can’t find such a
- service, it returns a null pointer.
- You can also scan the services database using ‘setservent’, ‘getservent’
- and ‘endservent’. Be careful when using these functions because they
- are not reentrant.
- -- Function: void setservent (int STAYOPEN)
- Preliminary: | MT-Unsafe race:servent locale | AS-Unsafe dlopen
- plugin heap lock | AC-Unsafe corrupt lock fd mem | *Note POSIX
- Safety Concepts::.
- This function opens the services database to begin scanning it.
- If the STAYOPEN argument is nonzero, this sets a flag so that
- subsequent calls to ‘getservbyname’ or ‘getservbyport’ will not
- close the database (as they usually would). This makes for more
- efficiency if you call those functions several times, by avoiding
- reopening the database for each call.
- -- Function: struct servent * getservent (void)
- Preliminary: | MT-Unsafe race:servent race:serventbuf locale |
- AS-Unsafe dlopen plugin heap lock | AC-Unsafe corrupt lock fd mem |
- *Note POSIX Safety Concepts::.
- This function returns the next entry in the services database. If
- there are no more entries, it returns a null pointer.
- -- Function: void endservent (void)
- Preliminary: | MT-Unsafe race:servent locale | AS-Unsafe dlopen
- plugin heap lock | AC-Unsafe corrupt lock fd mem | *Note POSIX
- Safety Concepts::.
- This function closes the services database.
- File: libc.info, Node: Byte Order, Next: Protocols Database, Prev: Services Database, Up: Internet Namespace
- 16.6.5 Byte Order Conversion
- ----------------------------
- Different kinds of computers use different conventions for the ordering
- of bytes within a word. Some computers put the most significant byte
- within a word first (this is called “big-endian” order), and others put
- it last (“little-endian” order).
- So that machines with different byte order conventions can
- communicate, the Internet protocols specify a canonical byte order
- convention for data transmitted over the network. This is known as
- "network byte order".
- When establishing an Internet socket connection, you must make sure
- that the data in the ‘sin_port’ and ‘sin_addr’ members of the
- ‘sockaddr_in’ structure are represented in network byte order. If you
- are encoding integer data in the messages sent through the socket, you
- should convert this to network byte order too. If you don’t do this,
- your program may fail when running on or talking to other kinds of
- machines.
- If you use ‘getservbyname’ and ‘gethostbyname’ or ‘inet_addr’ to get
- the port number and host address, the values are already in network byte
- order, and you can copy them directly into the ‘sockaddr_in’ structure.
- Otherwise, you have to convert the values explicitly. Use ‘htons’
- and ‘ntohs’ to convert values for the ‘sin_port’ member. Use ‘htonl’
- and ‘ntohl’ to convert IPv4 addresses for the ‘sin_addr’ member.
- (Remember, ‘struct in_addr’ is equivalent to ‘uint32_t’.) These
- functions are declared in ‘netinet/in.h’.
- -- Function: uint16_t htons (uint16_t HOSTSHORT)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function converts the ‘uint16_t’ integer HOSTSHORT from host
- byte order to network byte order.
- -- Function: uint16_t ntohs (uint16_t NETSHORT)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function converts the ‘uint16_t’ integer NETSHORT from network
- byte order to host byte order.
- -- Function: uint32_t htonl (uint32_t HOSTLONG)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function converts the ‘uint32_t’ integer HOSTLONG from host
- byte order to network byte order.
- This is used for IPv4 Internet addresses.
- -- Function: uint32_t ntohl (uint32_t NETLONG)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function converts the ‘uint32_t’ integer NETLONG from network
- byte order to host byte order.
- This is used for IPv4 Internet addresses.
- File: libc.info, Node: Protocols Database, Next: Inet Example, Prev: Byte Order, Up: Internet Namespace
- 16.6.6 Protocols Database
- -------------------------
- The communications protocol used with a socket controls low-level
- details of how data are exchanged. For example, the protocol implements
- things like checksums to detect errors in transmissions, and routing
- instructions for messages. Normal user programs have little reason to
- mess with these details directly.
- The default communications protocol for the Internet namespace
- depends on the communication style. For stream communication, the
- default is TCP (“transmission control protocol”). For datagram
- communication, the default is UDP (“user datagram protocol”). For
- reliable datagram communication, the default is RDP (“reliable datagram
- protocol”). You should nearly always use the default.
- Internet protocols are generally specified by a name instead of a
- number. The network protocols that a host knows about are stored in a
- database. This is usually either derived from the file
- ‘/etc/protocols’, or it may be an equivalent provided by a name server.
- You look up the protocol number associated with a named protocol in the
- database using the ‘getprotobyname’ function.
- Here are detailed descriptions of the utilities for accessing the
- protocols database. These are declared in ‘netdb.h’.
- -- Data Type: struct protoent
- This data type is used to represent entries in the network
- protocols database. It has the following members:
- ‘char *p_name’
- This is the official name of the protocol.
- ‘char **p_aliases’
- These are alternate names for the protocol, specified as an
- array of strings. The last element of the array is a null
- pointer.
- ‘int p_proto’
- This is the protocol number (in host byte order); use this
- member as the PROTOCOL argument to ‘socket’.
- You can use ‘getprotobyname’ and ‘getprotobynumber’ to search the
- protocols database for a specific protocol. The information is returned
- in a statically-allocated structure; you must copy the information if
- you need to save it across calls.
- -- Function: struct protoent * getprotobyname (const char *NAME)
- Preliminary: | MT-Unsafe race:protobyname locale | AS-Unsafe dlopen
- plugin heap lock | AC-Unsafe corrupt lock fd mem | *Note POSIX
- Safety Concepts::.
- The ‘getprotobyname’ function returns information about the network
- protocol named NAME. If there is no such protocol, it returns a
- null pointer.
- -- Function: struct protoent * getprotobynumber (int PROTOCOL)
- Preliminary: | MT-Unsafe race:protobynumber locale | AS-Unsafe
- dlopen plugin heap lock | AC-Unsafe corrupt lock fd mem | *Note
- POSIX Safety Concepts::.
- The ‘getprotobynumber’ function returns information about the
- network protocol with number PROTOCOL. If there is no such
- protocol, it returns a null pointer.
- You can also scan the whole protocols database one protocol at a time
- by using ‘setprotoent’, ‘getprotoent’ and ‘endprotoent’. Be careful
- when using these functions because they are not reentrant.
- -- Function: void setprotoent (int STAYOPEN)
- Preliminary: | MT-Unsafe race:protoent locale | AS-Unsafe dlopen
- plugin heap lock | AC-Unsafe corrupt lock fd mem | *Note POSIX
- Safety Concepts::.
- This function opens the protocols database to begin scanning it.
- If the STAYOPEN argument is nonzero, this sets a flag so that
- subsequent calls to ‘getprotobyname’ or ‘getprotobynumber’ will not
- close the database (as they usually would). This makes for more
- efficiency if you call those functions several times, by avoiding
- reopening the database for each call.
- -- Function: struct protoent * getprotoent (void)
- Preliminary: | MT-Unsafe race:protoent race:protoentbuf locale |
- AS-Unsafe dlopen plugin heap lock | AC-Unsafe corrupt lock fd mem |
- *Note POSIX Safety Concepts::.
- This function returns the next entry in the protocols database. It
- returns a null pointer if there are no more entries.
- -- Function: void endprotoent (void)
- Preliminary: | MT-Unsafe race:protoent locale | AS-Unsafe dlopen
- plugin heap lock | AC-Unsafe corrupt lock fd mem | *Note POSIX
- Safety Concepts::.
- This function closes the protocols database.
- File: libc.info, Node: Inet Example, Prev: Protocols Database, Up: Internet Namespace
- 16.6.7 Internet Socket Example
- ------------------------------
- Here is an example showing how to create and name a socket in the
- Internet namespace. The newly created socket exists on the machine that
- the program is running on. Rather than finding and using the machine’s
- Internet address, this example specifies ‘INADDR_ANY’ as the host
- address; the system replaces that with the machine’s actual address.
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- int
- make_socket (uint16_t port)
- {
- int sock;
- struct sockaddr_in name;
- /* Create the socket. */
- sock = socket (PF_INET, SOCK_STREAM, 0);
- if (sock < 0)
- {
- perror ("socket");
- exit (EXIT_FAILURE);
- }
- /* Give the socket a name. */
- name.sin_family = AF_INET;
- name.sin_port = htons (port);
- name.sin_addr.s_addr = htonl (INADDR_ANY);
- if (bind (sock, (struct sockaddr *) &name, sizeof (name)) < 0)
- {
- perror ("bind");
- exit (EXIT_FAILURE);
- }
- return sock;
- }
- Here is another example, showing how you can fill in a ‘sockaddr_in’
- structure, given a host name string and a port number:
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <netdb.h>
- void
- init_sockaddr (struct sockaddr_in *name,
- const char *hostname,
- uint16_t port)
- {
- struct hostent *hostinfo;
- name->sin_family = AF_INET;
- name->sin_port = htons (port);
- hostinfo = gethostbyname (hostname);
- if (hostinfo == NULL)
- {
- fprintf (stderr, "Unknown host %s.\n", hostname);
- exit (EXIT_FAILURE);
- }
- name->sin_addr = *(struct in_addr *) hostinfo->h_addr;
- }
- File: libc.info, Node: Misc Namespaces, Next: Open/Close Sockets, Prev: Internet Namespace, Up: Sockets
- 16.7 Other Namespaces
- =====================
- Certain other namespaces and associated protocol families are supported
- but not documented yet because they are not often used. ‘PF_NS’ refers
- to the Xerox Network Software protocols. ‘PF_ISO’ stands for Open
- Systems Interconnect. ‘PF_CCITT’ refers to protocols from CCITT.
- ‘socket.h’ defines these symbols and others naming protocols not
- actually implemented.
- ‘PF_IMPLINK’ is used for communicating between hosts and Internet
- Message Processors. For information on this and ‘PF_ROUTE’, an
- occasionally-used local area routing protocol, see the GNU Hurd Manual
- (to appear in the future).
- File: libc.info, Node: Open/Close Sockets, Next: Connections, Prev: Misc Namespaces, Up: Sockets
- 16.8 Opening and Closing Sockets
- ================================
- This section describes the actual library functions for opening and
- closing sockets. The same functions work for all namespaces and
- connection styles.
- * Menu:
- * Creating a Socket:: How to open a socket.
- * Closing a Socket:: How to close a socket.
- * Socket Pairs:: These are created like pipes.
- File: libc.info, Node: Creating a Socket, Next: Closing a Socket, Up: Open/Close Sockets
- 16.8.1 Creating a Socket
- ------------------------
- The primitive for creating a socket is the ‘socket’ function, declared
- in ‘sys/socket.h’.
- -- Function: int socket (int NAMESPACE, int STYLE, int PROTOCOL)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe fd | *Note POSIX Safety
- Concepts::.
- This function creates a socket and specifies communication style
- STYLE, which should be one of the socket styles listed in *note
- Communication Styles::. The NAMESPACE argument specifies the
- namespace; it must be ‘PF_LOCAL’ (*note Local Namespace::) or
- ‘PF_INET’ (*note Internet Namespace::). PROTOCOL designates the
- specific protocol (*note Socket Concepts::); zero is usually right
- for PROTOCOL.
- The return value from ‘socket’ is the file descriptor for the new
- socket, or ‘-1’ in case of error. The following ‘errno’ error
- conditions are defined for this function:
- ‘EPROTONOSUPPORT’
- The PROTOCOL or STYLE is not supported by the NAMESPACE
- specified.
- ‘EMFILE’
- The process already has too many file descriptors open.
- ‘ENFILE’
- The system already has too many file descriptors open.
- ‘EACCES’
- The process does not have the privilege to create a socket of
- the specified STYLE or PROTOCOL.
- ‘ENOBUFS’
- The system ran out of internal buffer space.
- The file descriptor returned by the ‘socket’ function supports both
- read and write operations. However, like pipes, sockets do not
- support file positioning operations.
- For examples of how to call the ‘socket’ function, see *note Local
- Socket Example::, or *note Inet Example::.
- File: libc.info, Node: Closing a Socket, Next: Socket Pairs, Prev: Creating a Socket, Up: Open/Close Sockets
- 16.8.2 Closing a Socket
- -----------------------
- When you have finished using a socket, you can simply close its file
- descriptor with ‘close’; see *note Opening and Closing Files::. If
- there is still data waiting to be transmitted over the connection,
- normally ‘close’ tries to complete this transmission. You can control
- this behavior using the ‘SO_LINGER’ socket option to specify a timeout
- period; see *note Socket Options::.
- You can also shut down only reception or transmission on a connection
- by calling ‘shutdown’, which is declared in ‘sys/socket.h’.
- -- Function: int shutdown (int SOCKET, int HOW)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- The ‘shutdown’ function shuts down the connection of socket SOCKET.
- The argument HOW specifies what action to perform:
- ‘0’
- Stop receiving data for this socket. If further data arrives,
- reject it.
- ‘1’
- Stop trying to transmit data from this socket. Discard any
- data waiting to be sent. Stop looking for acknowledgement of
- data already sent; don’t retransmit it if it is lost.
- ‘2’
- Stop both reception and transmission.
- The return value is ‘0’ on success and ‘-1’ on failure. The
- following ‘errno’ error conditions are defined for this function:
- ‘EBADF’
- SOCKET is not a valid file descriptor.
- ‘ENOTSOCK’
- SOCKET is not a socket.
- ‘ENOTCONN’
- SOCKET is not connected.
- File: libc.info, Node: Socket Pairs, Prev: Closing a Socket, Up: Open/Close Sockets
- 16.8.3 Socket Pairs
- -------------------
- A "socket pair" consists of a pair of connected (but unnamed) sockets.
- It is very similar to a pipe and is used in much the same way. Socket
- pairs are created with the ‘socketpair’ function, declared in
- ‘sys/socket.h’. A socket pair is much like a pipe; the main difference
- is that the socket pair is bidirectional, whereas the pipe has one
- input-only end and one output-only end (*note Pipes and FIFOs::).
- -- Function: int socketpair (int NAMESPACE, int STYLE, int PROTOCOL,
- int FILEDES[2])
- Preliminary: | MT-Safe | AS-Safe | AC-Safe fd | *Note POSIX Safety
- Concepts::.
- This function creates a socket pair, returning the file descriptors
- in ‘FILEDES[0]’ and ‘FILEDES[1]’. The socket pair is a full-duplex
- communications channel, so that both reading and writing may be
- performed at either end.
- The NAMESPACE, STYLE and PROTOCOL arguments are interpreted as for
- the ‘socket’ function. STYLE should be one of the communication
- styles listed in *note Communication Styles::. The NAMESPACE
- argument specifies the namespace, which must be ‘AF_LOCAL’ (*note
- Local Namespace::); PROTOCOL specifies the communications protocol,
- but zero is the only meaningful value.
- If STYLE specifies a connectionless communication style, then the
- two sockets you get are not _connected_, strictly speaking, but
- each of them knows the other as the default destination address, so
- they can send packets to each other.
- The ‘socketpair’ function returns ‘0’ on success and ‘-1’ on
- failure. The following ‘errno’ error conditions are defined for
- this function:
- ‘EMFILE’
- The process has too many file descriptors open.
- ‘EAFNOSUPPORT’
- The specified namespace is not supported.
- ‘EPROTONOSUPPORT’
- The specified protocol is not supported.
- ‘EOPNOTSUPP’
- The specified protocol does not support the creation of socket
- pairs.
- File: libc.info, Node: Connections, Next: Datagrams, Prev: Open/Close Sockets, Up: Sockets
- 16.9 Using Sockets with Connections
- ===================================
- The most common communication styles involve making a connection to a
- particular other socket, and then exchanging data with that socket over
- and over. Making a connection is asymmetric; one side (the "client")
- acts to request a connection, while the other side (the "server") makes
- a socket and waits for the connection request.
- * Menu:
- * Connecting:: What the client program must do.
- * Listening:: How a server program waits for requests.
- * Accepting Connections:: What the server does when it gets a request.
- * Who is Connected:: Getting the address of the
- other side of a connection.
- * Transferring Data:: How to send and receive data.
- * Byte Stream Example:: An example program: a client for communicating
- over a byte stream socket in the Internet namespace.
- * Server Example:: A corresponding server program.
- * Out-of-Band Data:: This is an advanced feature.
- File: libc.info, Node: Connecting, Next: Listening, Up: Connections
- 16.9.1 Making a Connection
- --------------------------
- In making a connection, the client makes a connection while the server
- waits for and accepts the connection. Here we discuss what the client
- program must do with the ‘connect’ function, which is declared in
- ‘sys/socket.h’.
- -- Function: int connect (int SOCKET, struct sockaddr *ADDR, socklen_t
- LENGTH)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- The ‘connect’ function initiates a connection from the socket with
- file descriptor SOCKET to the socket whose address is specified by
- the ADDR and LENGTH arguments. (This socket is typically on
- another machine, and it must be already set up as a server.) *Note
- Socket Addresses::, for information about how these arguments are
- interpreted.
- Normally, ‘connect’ waits until the server responds to the request
- before it returns. You can set nonblocking mode on the socket
- SOCKET to make ‘connect’ return immediately without waiting for the
- response. *Note File Status Flags::, for information about
- nonblocking mode.
- The normal return value from ‘connect’ is ‘0’. If an error occurs,
- ‘connect’ returns ‘-1’. The following ‘errno’ error conditions are
- defined for this function:
- ‘EBADF’
- The socket SOCKET is not a valid file descriptor.
- ‘ENOTSOCK’
- File descriptor SOCKET is not a socket.
- ‘EADDRNOTAVAIL’
- The specified address is not available on the remote machine.
- ‘EAFNOSUPPORT’
- The namespace of the ADDR is not supported by this socket.
- ‘EISCONN’
- The socket SOCKET is already connected.
- ‘ETIMEDOUT’
- The attempt to establish the connection timed out.
- ‘ECONNREFUSED’
- The server has actively refused to establish the connection.
- ‘ENETUNREACH’
- The network of the given ADDR isn’t reachable from this host.
- ‘EADDRINUSE’
- The socket address of the given ADDR is already in use.
- ‘EINPROGRESS’
- The socket SOCKET is non-blocking and the connection could not
- be established immediately. You can determine when the
- connection is completely established with ‘select’; *note
- Waiting for I/O::. Another ‘connect’ call on the same socket,
- before the connection is completely established, will fail
- with ‘EALREADY’.
- ‘EALREADY’
- The socket SOCKET is non-blocking and already has a pending
- connection in progress (see ‘EINPROGRESS’ above).
- This function is defined as a cancellation point in multi-threaded
- programs, so one has to be prepared for this and make sure that
- allocated resources (like memory, file descriptors, semaphores or
- whatever) are freed even if the thread is canceled.
- File: libc.info, Node: Listening, Next: Accepting Connections, Prev: Connecting, Up: Connections
- 16.9.2 Listening for Connections
- --------------------------------
- Now let us consider what the server process must do to accept
- connections on a socket. First it must use the ‘listen’ function to
- enable connection requests on the socket, and then accept each incoming
- connection with a call to ‘accept’ (*note Accepting Connections::).
- Once connection requests are enabled on a server socket, the ‘select’
- function reports when the socket has a connection ready to be accepted
- (*note Waiting for I/O::).
- The ‘listen’ function is not allowed for sockets using connectionless
- communication styles.
- You can write a network server that does not even start running until
- a connection to it is requested. *Note Inetd Servers::.
- In the Internet namespace, there are no special protection mechanisms
- for controlling access to a port; any process on any machine can make a
- connection to your server. If you want to restrict access to your
- server, make it examine the addresses associated with connection
- requests or implement some other handshaking or identification protocol.
- In the local namespace, the ordinary file protection bits control who
- has access to connect to the socket.
- -- Function: int listen (int SOCKET, int N)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe fd | *Note POSIX Safety
- Concepts::.
- The ‘listen’ function enables the socket SOCKET to accept
- connections, thus making it a server socket.
- The argument N specifies the length of the queue for pending
- connections. When the queue fills, new clients attempting to
- connect fail with ‘ECONNREFUSED’ until the server calls ‘accept’ to
- accept a connection from the queue.
- The ‘listen’ function returns ‘0’ on success and ‘-1’ on failure.
- The following ‘errno’ error conditions are defined for this
- function:
- ‘EBADF’
- The argument SOCKET is not a valid file descriptor.
- ‘ENOTSOCK’
- The argument SOCKET is not a socket.
- ‘EOPNOTSUPP’
- The socket SOCKET does not support this operation.
- File: libc.info, Node: Accepting Connections, Next: Who is Connected, Prev: Listening, Up: Connections
- 16.9.3 Accepting Connections
- ----------------------------
- When a server receives a connection request, it can complete the
- connection by accepting the request. Use the function ‘accept’ to do
- this.
- A socket that has been established as a server can accept connection
- requests from multiple clients. The server’s original socket _does not
- become part of the connection_; instead, ‘accept’ makes a new socket
- which participates in the connection. ‘accept’ returns the descriptor
- for this socket. The server’s original socket remains available for
- listening for further connection requests.
- The number of pending connection requests on a server socket is
- finite. If connection requests arrive from clients faster than the
- server can act upon them, the queue can fill up and additional requests
- are refused with an ‘ECONNREFUSED’ error. You can specify the maximum
- length of this queue as an argument to the ‘listen’ function, although
- the system may also impose its own internal limit on the length of this
- queue.
- -- Function: int accept (int SOCKET, struct sockaddr *ADDR, socklen_t
- *LENGTH_PTR)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe fd | *Note POSIX Safety
- Concepts::.
- This function is used to accept a connection request on the server
- socket SOCKET.
- The ‘accept’ function waits if there are no connections pending,
- unless the socket SOCKET has nonblocking mode set. (You can use
- ‘select’ to wait for a pending connection, with a nonblocking
- socket.) *Note File Status Flags::, for information about
- nonblocking mode.
- The ADDR and LENGTH-PTR arguments are used to return information
- about the name of the client socket that initiated the connection.
- *Note Socket Addresses::, for information about the format of the
- information.
- Accepting a connection does not make SOCKET part of the connection.
- Instead, it creates a new socket which becomes connected. The
- normal return value of ‘accept’ is the file descriptor for the new
- socket.
- After ‘accept’, the original socket SOCKET remains open and
- unconnected, and continues listening until you close it. You can
- accept further connections with SOCKET by calling ‘accept’ again.
- If an error occurs, ‘accept’ returns ‘-1’. The following ‘errno’
- error conditions are defined for this function:
- ‘EBADF’
- The SOCKET argument is not a valid file descriptor.
- ‘ENOTSOCK’
- The descriptor SOCKET argument is not a socket.
- ‘EOPNOTSUPP’
- The descriptor SOCKET does not support this operation.
- ‘EWOULDBLOCK’
- SOCKET has nonblocking mode set, and there are no pending
- connections immediately available.
- This function is defined as a cancellation point in multi-threaded
- programs, so one has to be prepared for this and make sure that
- allocated resources (like memory, file descriptors, semaphores or
- whatever) are freed even if the thread is canceled.
- The ‘accept’ function is not allowed for sockets using connectionless
- communication styles.
- File: libc.info, Node: Who is Connected, Next: Transferring Data, Prev: Accepting Connections, Up: Connections
- 16.9.4 Who is Connected to Me?
- ------------------------------
- -- Function: int getpeername (int SOCKET, struct sockaddr *ADDR,
- socklen_t *LENGTH-PTR)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- The ‘getpeername’ function returns the address of the socket that
- SOCKET is connected to; it stores the address in the memory space
- specified by ADDR and LENGTH-PTR. It stores the length of the
- address in ‘*LENGTH-PTR’.
- *Note Socket Addresses::, for information about the format of the
- address. In some operating systems, ‘getpeername’ works only for
- sockets in the Internet domain.
- The return value is ‘0’ on success and ‘-1’ on error. The
- following ‘errno’ error conditions are defined for this function:
- ‘EBADF’
- The argument SOCKET is not a valid file descriptor.
- ‘ENOTSOCK’
- The descriptor SOCKET is not a socket.
- ‘ENOTCONN’
- The socket SOCKET is not connected.
- ‘ENOBUFS’
- There are not enough internal buffers available.
- File: libc.info, Node: Transferring Data, Next: Byte Stream Example, Prev: Who is Connected, Up: Connections
- 16.9.5 Transferring Data
- ------------------------
- Once a socket has been connected to a peer, you can use the ordinary
- ‘read’ and ‘write’ operations (*note I/O Primitives::) to transfer data.
- A socket is a two-way communications channel, so read and write
- operations can be performed at either end.
- There are also some I/O modes that are specific to socket operations.
- In order to specify these modes, you must use the ‘recv’ and ‘send’
- functions instead of the more generic ‘read’ and ‘write’ functions. The
- ‘recv’ and ‘send’ functions take an additional argument which you can
- use to specify various flags to control special I/O modes. For example,
- you can specify the ‘MSG_OOB’ flag to read or write out-of-band data,
- the ‘MSG_PEEK’ flag to peek at input, or the ‘MSG_DONTROUTE’ flag to
- control inclusion of routing information on output.
- * Menu:
- * Sending Data:: Sending data with ‘send’.
- * Receiving Data:: Reading data with ‘recv’.
- * Socket Data Options:: Using ‘send’ and ‘recv’.
- File: libc.info, Node: Sending Data, Next: Receiving Data, Up: Transferring Data
- 16.9.5.1 Sending Data
- .....................
- The ‘send’ function is declared in the header file ‘sys/socket.h’. If
- your FLAGS argument is zero, you can just as well use ‘write’ instead of
- ‘send’; see *note I/O Primitives::. If the socket was connected but the
- connection has broken, you get a ‘SIGPIPE’ signal for any use of ‘send’
- or ‘write’ (*note Miscellaneous Signals::).
- -- Function: ssize_t send (int SOCKET, const void *BUFFER, size_t SIZE,
- int FLAGS)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- The ‘send’ function is like ‘write’, but with the additional flags
- FLAGS. The possible values of FLAGS are described in *note Socket
- Data Options::.
- This function returns the number of bytes transmitted, or ‘-1’ on
- failure. If the socket is nonblocking, then ‘send’ (like ‘write’)
- can return after sending just part of the data. *Note File Status
- Flags::, for information about nonblocking mode.
- Note, however, that a successful return value merely indicates that
- the message has been sent without error, not necessarily that it
- has been received without error.
- The following ‘errno’ error conditions are defined for this
- function:
- ‘EBADF’
- The SOCKET argument is not a valid file descriptor.
- ‘EINTR’
- The operation was interrupted by a signal before any data was
- sent. *Note Interrupted Primitives::.
- ‘ENOTSOCK’
- The descriptor SOCKET is not a socket.
- ‘EMSGSIZE’
- The socket type requires that the message be sent atomically,
- but the message is too large for this to be possible.
- ‘EWOULDBLOCK’
- Nonblocking mode has been set on the socket, and the write
- operation would block. (Normally ‘send’ blocks until the
- operation can be completed.)
- ‘ENOBUFS’
- There is not enough internal buffer space available.
- ‘ENOTCONN’
- You never connected this socket.
- ‘EPIPE’
- This socket was connected but the connection is now broken.
- In this case, ‘send’ generates a ‘SIGPIPE’ signal first; if
- that signal is ignored or blocked, or if its handler returns,
- then ‘send’ fails with ‘EPIPE’.
- This function is defined as a cancellation point in multi-threaded
- programs, so one has to be prepared for this and make sure that
- allocated resources (like memory, file descriptors, semaphores or
- whatever) are freed even if the thread is canceled.
- File: libc.info, Node: Receiving Data, Next: Socket Data Options, Prev: Sending Data, Up: Transferring Data
- 16.9.5.2 Receiving Data
- .......................
- The ‘recv’ function is declared in the header file ‘sys/socket.h’. If
- your FLAGS argument is zero, you can just as well use ‘read’ instead of
- ‘recv’; see *note I/O Primitives::.
- -- Function: ssize_t recv (int SOCKET, void *BUFFER, size_t SIZE, int
- FLAGS)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- The ‘recv’ function is like ‘read’, but with the additional flags
- FLAGS. The possible values of FLAGS are described in *note Socket
- Data Options::.
- If nonblocking mode is set for SOCKET, and no data are available to
- be read, ‘recv’ fails immediately rather than waiting. *Note File
- Status Flags::, for information about nonblocking mode.
- This function returns the number of bytes received, or ‘-1’ on
- failure. The following ‘errno’ error conditions are defined for
- this function:
- ‘EBADF’
- The SOCKET argument is not a valid file descriptor.
- ‘ENOTSOCK’
- The descriptor SOCKET is not a socket.
- ‘EWOULDBLOCK’
- Nonblocking mode has been set on the socket, and the read
- operation would block. (Normally, ‘recv’ blocks until there
- is input available to be read.)
- ‘EINTR’
- The operation was interrupted by a signal before any data was
- read. *Note Interrupted Primitives::.
- ‘ENOTCONN’
- You never connected this socket.
- This function is defined as a cancellation point in multi-threaded
- programs, so one has to be prepared for this and make sure that
- allocated resources (like memory, file descriptors, semaphores or
- whatever) are freed even if the thread is canceled.
- File: libc.info, Node: Socket Data Options, Prev: Receiving Data, Up: Transferring Data
- 16.9.5.3 Socket Data Options
- ............................
- The FLAGS argument to ‘send’ and ‘recv’ is a bit mask. You can
- bitwise-OR the values of the following macros together to obtain a value
- for this argument. All are defined in the header file ‘sys/socket.h’.
- -- Macro: int MSG_OOB
- Send or receive out-of-band data. *Note Out-of-Band Data::.
- -- Macro: int MSG_PEEK
- Look at the data but don’t remove it from the input queue. This is
- only meaningful with input functions such as ‘recv’, not with
- ‘send’.
- -- Macro: int MSG_DONTROUTE
- Don’t include routing information in the message. This is only
- meaningful with output operations, and is usually only of interest
- for diagnostic or routing programs. We don’t try to explain it
- here.
- File: libc.info, Node: Byte Stream Example, Next: Server Example, Prev: Transferring Data, Up: Connections
- 16.9.6 Byte Stream Socket Example
- ---------------------------------
- Here is an example client program that makes a connection for a byte
- stream socket in the Internet namespace. It doesn’t do anything
- particularly interesting once it has connected to the server; it just
- sends a text string to the server and exits.
- This program uses ‘init_sockaddr’ to set up the socket address; see
- *note Inet Example::.
- #include <stdio.h>
- #include <errno.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <netdb.h>
- #define PORT 5555
- #define MESSAGE "Yow!!! Are we having fun yet?!?"
- #define SERVERHOST "www.gnu.org"
- void
- write_to_server (int filedes)
- {
- int nbytes;
- nbytes = write (filedes, MESSAGE, strlen (MESSAGE) + 1);
- if (nbytes < 0)
- {
- perror ("write");
- exit (EXIT_FAILURE);
- }
- }
- int
- main (void)
- {
- extern void init_sockaddr (struct sockaddr_in *name,
- const char *hostname,
- uint16_t port);
- int sock;
- struct sockaddr_in servername;
- /* Create the socket. */
- sock = socket (PF_INET, SOCK_STREAM, 0);
- if (sock < 0)
- {
- perror ("socket (client)");
- exit (EXIT_FAILURE);
- }
- /* Connect to the server. */
- init_sockaddr (&servername, SERVERHOST, PORT);
- if (0 > connect (sock,
- (struct sockaddr *) &servername,
- sizeof (servername)))
- {
- perror ("connect (client)");
- exit (EXIT_FAILURE);
- }
- /* Send data to the server. */
- write_to_server (sock);
- close (sock);
- exit (EXIT_SUCCESS);
- }
- File: libc.info, Node: Server Example, Next: Out-of-Band Data, Prev: Byte Stream Example, Up: Connections
- 16.9.7 Byte Stream Connection Server Example
- --------------------------------------------
- The server end is much more complicated. Since we want to allow
- multiple clients to be connected to the server at the same time, it
- would be incorrect to wait for input from a single client by simply
- calling ‘read’ or ‘recv’. Instead, the right thing to do is to use
- ‘select’ (*note Waiting for I/O::) to wait for input on all of the open
- sockets. This also allows the server to deal with additional connection
- requests.
- This particular server doesn’t do anything interesting once it has
- gotten a message from a client. It does close the socket for that
- client when it detects an end-of-file condition (resulting from the
- client shutting down its end of the connection).
- This program uses ‘make_socket’ to set up the socket address; see
- *note Inet Example::.
- #include <stdio.h>
- #include <errno.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <netdb.h>
- #define PORT 5555
- #define MAXMSG 512
- int
- read_from_client (int filedes)
- {
- char buffer[MAXMSG];
- int nbytes;
- nbytes = read (filedes, buffer, MAXMSG);
- if (nbytes < 0)
- {
- /* Read error. */
- perror ("read");
- exit (EXIT_FAILURE);
- }
- else if (nbytes == 0)
- /* End-of-file. */
- return -1;
- else
- {
- /* Data read. */
- fprintf (stderr, "Server: got message: `%s'\n", buffer);
- return 0;
- }
- }
- int
- main (void)
- {
- extern int make_socket (uint16_t port);
- int sock;
- fd_set active_fd_set, read_fd_set;
- int i;
- struct sockaddr_in clientname;
- size_t size;
- /* Create the socket and set it up to accept connections. */
- sock = make_socket (PORT);
- if (listen (sock, 1) < 0)
- {
- perror ("listen");
- exit (EXIT_FAILURE);
- }
- /* Initialize the set of active sockets. */
- FD_ZERO (&active_fd_set);
- FD_SET (sock, &active_fd_set);
- while (1)
- {
- /* Block until input arrives on one or more active sockets. */
- read_fd_set = active_fd_set;
- if (select (FD_SETSIZE, &read_fd_set, NULL, NULL, NULL) < 0)
- {
- perror ("select");
- exit (EXIT_FAILURE);
- }
- /* Service all the sockets with input pending. */
- for (i = 0; i < FD_SETSIZE; ++i)
- if (FD_ISSET (i, &read_fd_set))
- {
- if (i == sock)
- {
- /* Connection request on original socket. */
- int new;
- size = sizeof (clientname);
- new = accept (sock,
- (struct sockaddr *) &clientname,
- &size);
- if (new < 0)
- {
- perror ("accept");
- exit (EXIT_FAILURE);
- }
- fprintf (stderr,
- "Server: connect from host %s, port %hd.\n",
- inet_ntoa (clientname.sin_addr),
- ntohs (clientname.sin_port));
- FD_SET (new, &active_fd_set);
- }
- else
- {
- /* Data arriving on an already-connected socket. */
- if (read_from_client (i) < 0)
- {
- close (i);
- FD_CLR (i, &active_fd_set);
- }
- }
- }
- }
- }
- File: libc.info, Node: Out-of-Band Data, Prev: Server Example, Up: Connections
- 16.9.8 Out-of-Band Data
- -----------------------
- Streams with connections permit "out-of-band" data that is delivered
- with higher priority than ordinary data. Typically the reason for
- sending out-of-band data is to send notice of an exceptional condition.
- To send out-of-band data use ‘send’, specifying the flag ‘MSG_OOB’
- (*note Sending Data::).
- Out-of-band data are received with higher priority because the
- receiving process need not read it in sequence; to read the next
- available out-of-band data, use ‘recv’ with the ‘MSG_OOB’ flag (*note
- Receiving Data::). Ordinary read operations do not read out-of-band
- data; they read only ordinary data.
- When a socket finds that out-of-band data are on their way, it sends
- a ‘SIGURG’ signal to the owner process or process group of the socket.
- You can specify the owner using the ‘F_SETOWN’ command to the ‘fcntl’
- function; see *note Interrupt Input::. You must also establish a
- handler for this signal, as described in *note Signal Handling::, in
- order to take appropriate action such as reading the out-of-band data.
- Alternatively, you can test for pending out-of-band data, or wait
- until there is out-of-band data, using the ‘select’ function; it can
- wait for an exceptional condition on the socket. *Note Waiting for
- I/O::, for more information about ‘select’.
- Notification of out-of-band data (whether with ‘SIGURG’ or with
- ‘select’) indicates that out-of-band data are on the way; the data may
- not actually arrive until later. If you try to read the out-of-band
- data before it arrives, ‘recv’ fails with an ‘EWOULDBLOCK’ error.
- Sending out-of-band data automatically places a “mark” in the stream
- of ordinary data, showing where in the sequence the out-of-band data
- “would have been”. This is useful when the meaning of out-of-band data
- is “cancel everything sent so far”. Here is how you can test, in the
- receiving process, whether any ordinary data was sent before the mark:
- success = ioctl (socket, SIOCATMARK, &atmark);
- The ‘integer’ variable ATMARK is set to a nonzero value if the
- socket’s read pointer has reached the “mark”.
- Here’s a function to discard any ordinary data preceding the
- out-of-band mark:
- int
- discard_until_mark (int socket)
- {
- while (1)
- {
- /* This is not an arbitrary limit; any size will do. */
- char buffer[1024];
- int atmark, success;
- /* If we have reached the mark, return. */
- success = ioctl (socket, SIOCATMARK, &atmark);
- if (success < 0)
- perror ("ioctl");
- if (result)
- return;
- /* Otherwise, read a bunch of ordinary data and discard it.
- This is guaranteed not to read past the mark
- if it starts before the mark. */
- success = read (socket, buffer, sizeof buffer);
- if (success < 0)
- perror ("read");
- }
- }
- If you don’t want to discard the ordinary data preceding the mark,
- you may need to read some of it anyway, to make room in internal system
- buffers for the out-of-band data. If you try to read out-of-band data
- and get an ‘EWOULDBLOCK’ error, try reading some ordinary data (saving
- it so that you can use it when you want it) and see if that makes room.
- Here is an example:
- struct buffer
- {
- char *buf;
- int size;
- struct buffer *next;
- };
- /* Read the out-of-band data from SOCKET and return it
- as a ‘struct buffer’, which records the address of the data
- and its size.
- It may be necessary to read some ordinary data
- in order to make room for the out-of-band data.
- If so, the ordinary data are saved as a chain of buffers
- found in the ‘next’ field of the value. */
- struct buffer *
- read_oob (int socket)
- {
- struct buffer *tail = 0;
- struct buffer *list = 0;
- while (1)
- {
- /* This is an arbitrary limit.
- Does anyone know how to do this without a limit? */
- #define BUF_SZ 1024
- char *buf = (char *) xmalloc (BUF_SZ);
- int success;
- int atmark;
- /* Try again to read the out-of-band data. */
- success = recv (socket, buf, BUF_SZ, MSG_OOB);
- if (success >= 0)
- {
- /* We got it, so return it. */
- struct buffer *link
- = (struct buffer *) xmalloc (sizeof (struct buffer));
- link->buf = buf;
- link->size = success;
- link->next = list;
- return link;
- }
- /* If we fail, see if we are at the mark. */
- success = ioctl (socket, SIOCATMARK, &atmark);
- if (success < 0)
- perror ("ioctl");
- if (atmark)
- {
- /* At the mark; skipping past more ordinary data cannot help.
- So just wait a while. */
- sleep (1);
- continue;
- }
- /* Otherwise, read a bunch of ordinary data and save it.
- This is guaranteed not to read past the mark
- if it starts before the mark. */
- success = read (socket, buf, BUF_SZ);
- if (success < 0)
- perror ("read");
- /* Save this data in the buffer list. */
- {
- struct buffer *link
- = (struct buffer *) xmalloc (sizeof (struct buffer));
- link->buf = buf;
- link->size = success;
- /* Add the new link to the end of the list. */
- if (tail)
- tail->next = link;
- else
- list = link;
- tail = link;
- }
- }
- }
- File: libc.info, Node: Datagrams, Next: Inetd, Prev: Connections, Up: Sockets
- 16.10 Datagram Socket Operations
- ================================
- This section describes how to use communication styles that don’t use
- connections (styles ‘SOCK_DGRAM’ and ‘SOCK_RDM’). Using these styles,
- you group data into packets and each packet is an independent
- communication. You specify the destination for each packet
- individually.
- Datagram packets are like letters: you send each one independently
- with its own destination address, and they may arrive in the wrong order
- or not at all.
- The ‘listen’ and ‘accept’ functions are not allowed for sockets using
- connectionless communication styles.
- * Menu:
- * Sending Datagrams:: Sending packets on a datagram socket.
- * Receiving Datagrams:: Receiving packets on a datagram socket.
- * Datagram Example:: An example program: packets sent over a
- datagram socket in the local namespace.
- * Example Receiver:: Another program, that receives those packets.
- File: libc.info, Node: Sending Datagrams, Next: Receiving Datagrams, Up: Datagrams
- 16.10.1 Sending Datagrams
- -------------------------
- The normal way of sending data on a datagram socket is by using the
- ‘sendto’ function, declared in ‘sys/socket.h’.
- You can call ‘connect’ on a datagram socket, but this only specifies
- a default destination for further data transmission on the socket. When
- a socket has a default destination you can use ‘send’ (*note Sending
- Data::) or even ‘write’ (*note I/O Primitives::) to send a packet there.
- You can cancel the default destination by calling ‘connect’ using an
- address format of ‘AF_UNSPEC’ in the ADDR argument. *Note Connecting::,
- for more information about the ‘connect’ function.
- -- Function: ssize_t sendto (int SOCKET, const void *BUFFER, size_t
- SIZE, int FLAGS, struct sockaddr *ADDR, socklen_t LENGTH)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- The ‘sendto’ function transmits the data in the BUFFER through the
- socket SOCKET to the destination address specified by the ADDR and
- LENGTH arguments. The SIZE argument specifies the number of bytes
- to be transmitted.
- The FLAGS are interpreted the same way as for ‘send’; see *note
- Socket Data Options::.
- The return value and error conditions are also the same as for
- ‘send’, but you cannot rely on the system to detect errors and
- report them; the most common error is that the packet is lost or
- there is no-one at the specified address to receive it, and the
- operating system on your machine usually does not know this.
- It is also possible for one call to ‘sendto’ to report an error
- owing to a problem related to a previous call.
- This function is defined as a cancellation point in multi-threaded
- programs, so one has to be prepared for this and make sure that
- allocated resources (like memory, file descriptors, semaphores or
- whatever) are freed even if the thread is canceled.
- File: libc.info, Node: Receiving Datagrams, Next: Datagram Example, Prev: Sending Datagrams, Up: Datagrams
- 16.10.2 Receiving Datagrams
- ---------------------------
- The ‘recvfrom’ function reads a packet from a datagram socket and also
- tells you where it was sent from. This function is declared in
- ‘sys/socket.h’.
- -- Function: ssize_t recvfrom (int SOCKET, void *BUFFER, size_t SIZE,
- int FLAGS, struct sockaddr *ADDR, socklen_t *LENGTH-PTR)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- The ‘recvfrom’ function reads one packet from the socket SOCKET
- into the buffer BUFFER. The SIZE argument specifies the maximum
- number of bytes to be read.
- If the packet is longer than SIZE bytes, then you get the first
- SIZE bytes of the packet and the rest of the packet is lost.
- There’s no way to read the rest of the packet. Thus, when you use
- a packet protocol, you must always know how long a packet to
- expect.
- The ADDR and LENGTH-PTR arguments are used to return the address
- where the packet came from. *Note Socket Addresses::. For a
- socket in the local domain the address information won’t be
- meaningful, since you can’t read the address of such a socket
- (*note Local Namespace::). You can specify a null pointer as the
- ADDR argument if you are not interested in this information.
- The FLAGS are interpreted the same way as for ‘recv’ (*note Socket
- Data Options::). The return value and error conditions are also
- the same as for ‘recv’.
- This function is defined as a cancellation point in multi-threaded
- programs, so one has to be prepared for this and make sure that
- allocated resources (like memory, file descriptors, semaphores or
- whatever) are freed even if the thread is canceled.
- You can use plain ‘recv’ (*note Receiving Data::) instead of
- ‘recvfrom’ if you don’t need to find out who sent the packet (either
- because you know where it should come from or because you treat all
- possible senders alike). Even ‘read’ can be used if you don’t want to
- specify FLAGS (*note I/O Primitives::).
- File: libc.info, Node: Datagram Example, Next: Example Receiver, Prev: Receiving Datagrams, Up: Datagrams
- 16.10.3 Datagram Socket Example
- -------------------------------
- Here is a set of example programs that send messages over a datagram
- stream in the local namespace. Both the client and server programs use
- the ‘make_named_socket’ function that was presented in *note Local
- Socket Example::, to create and name their sockets.
- First, here is the server program. It sits in a loop waiting for
- messages to arrive, bouncing each message back to the sender. Obviously
- this isn’t a particularly useful program, but it does show the general
- ideas involved.
- #include <stdio.h>
- #include <errno.h>
- #include <stdlib.h>
- #include <sys/socket.h>
- #include <sys/un.h>
- #define SERVER "/tmp/serversocket"
- #define MAXMSG 512
- int
- main (void)
- {
- int sock;
- char message[MAXMSG];
- struct sockaddr_un name;
- size_t size;
- int nbytes;
- /* Remove the filename first, it’s ok if the call fails */
- unlink (SERVER);
- /* Make the socket, then loop endlessly. */
- sock = make_named_socket (SERVER);
- while (1)
- {
- /* Wait for a datagram. */
- size = sizeof (name);
- nbytes = recvfrom (sock, message, MAXMSG, 0,
- (struct sockaddr *) & name, &size);
- if (nbytes < 0)
- {
- perror ("recfrom (server)");
- exit (EXIT_FAILURE);
- }
- /* Give a diagnostic message. */
- fprintf (stderr, "Server: got message: %s\n", message);
- /* Bounce the message back to the sender. */
- nbytes = sendto (sock, message, nbytes, 0,
- (struct sockaddr *) & name, size);
- if (nbytes < 0)
- {
- perror ("sendto (server)");
- exit (EXIT_FAILURE);
- }
- }
- }
- File: libc.info, Node: Example Receiver, Prev: Datagram Example, Up: Datagrams
- 16.10.4 Example of Reading Datagrams
- ------------------------------------
- Here is the client program corresponding to the server above.
- It sends a datagram to the server and then waits for a reply. Notice
- that the socket for the client (as well as for the server) in this
- example has to be given a name. This is so that the server can direct a
- message back to the client. Since the socket has no associated
- connection state, the only way the server can do this is by referencing
- the name of the client.
- #include <stdio.h>
- #include <errno.h>
- #include <unistd.h>
- #include <stdlib.h>
- #include <sys/socket.h>
- #include <sys/un.h>
- #define SERVER "/tmp/serversocket"
- #define CLIENT "/tmp/mysocket"
- #define MAXMSG 512
- #define MESSAGE "Yow!!! Are we having fun yet?!?"
- int
- main (void)
- {
- extern int make_named_socket (const char *name);
- int sock;
- char message[MAXMSG];
- struct sockaddr_un name;
- size_t size;
- int nbytes;
- /* Make the socket. */
- sock = make_named_socket (CLIENT);
- /* Initialize the server socket address. */
- name.sun_family = AF_LOCAL;
- strcpy (name.sun_path, SERVER);
- size = strlen (name.sun_path) + sizeof (name.sun_family);
- /* Send the datagram. */
- nbytes = sendto (sock, MESSAGE, strlen (MESSAGE) + 1, 0,
- (struct sockaddr *) & name, size);
- if (nbytes < 0)
- {
- perror ("sendto (client)");
- exit (EXIT_FAILURE);
- }
- /* Wait for a reply. */
- nbytes = recvfrom (sock, message, MAXMSG, 0, NULL, 0);
- if (nbytes < 0)
- {
- perror ("recfrom (client)");
- exit (EXIT_FAILURE);
- }
- /* Print a diagnostic message. */
- fprintf (stderr, "Client: got message: %s\n", message);
- /* Clean up. */
- remove (CLIENT);
- close (sock);
- }
- Keep in mind that datagram socket communications are unreliable. In
- this example, the client program waits indefinitely if the message never
- reaches the server or if the server’s response never comes back. It’s
- up to the user running the program to kill and restart it if desired. A
- more automatic solution could be to use ‘select’ (*note Waiting for
- I/O::) to establish a timeout period for the reply, and in case of
- timeout either re-send the message or shut down the socket and exit.
- File: libc.info, Node: Inetd, Next: Socket Options, Prev: Datagrams, Up: Sockets
- 16.11 The ‘inetd’ Daemon
- ========================
- We’ve explained above how to write a server program that does its own
- listening. Such a server must already be running in order for anyone to
- connect to it.
- Another way to provide a service on an Internet port is to let the
- daemon program ‘inetd’ do the listening. ‘inetd’ is a program that runs
- all the time and waits (using ‘select’) for messages on a specified set
- of ports. When it receives a message, it accepts the connection (if the
- socket style calls for connections) and then forks a child process to
- run the corresponding server program. You specify the ports and their
- programs in the file ‘/etc/inetd.conf’.
- * Menu:
- * Inetd Servers::
- * Configuring Inetd::
- File: libc.info, Node: Inetd Servers, Next: Configuring Inetd, Up: Inetd
- 16.11.1 ‘inetd’ Servers
- -----------------------
- Writing a server program to be run by ‘inetd’ is very simple. Each time
- someone requests a connection to the appropriate port, a new server
- process starts. The connection already exists at this time; the socket
- is available as the standard input descriptor and as the standard output
- descriptor (descriptors 0 and 1) in the server process. Thus the server
- program can begin reading and writing data right away. Often the
- program needs only the ordinary I/O facilities; in fact, a
- general-purpose filter program that knows nothing about sockets can work
- as a byte stream server run by ‘inetd’.
- You can also use ‘inetd’ for servers that use connectionless
- communication styles. For these servers, ‘inetd’ does not try to accept
- a connection since no connection is possible. It just starts the server
- program, which can read the incoming datagram packet from descriptor 0.
- The server program can handle one request and then exit, or you can
- choose to write it to keep reading more requests until no more arrive,
- and then exit. You must specify which of these two techniques the
- server uses when you configure ‘inetd’.
- File: libc.info, Node: Configuring Inetd, Prev: Inetd Servers, Up: Inetd
- 16.11.2 Configuring ‘inetd’
- ---------------------------
- The file ‘/etc/inetd.conf’ tells ‘inetd’ which ports to listen to and
- what server programs to run for them. Normally each entry in the file
- is one line, but you can split it onto multiple lines provided all but
- the first line of the entry start with whitespace. Lines that start
- with ‘#’ are comments.
- Here are two standard entries in ‘/etc/inetd.conf’:
- ftp stream tcp nowait root /libexec/ftpd ftpd
- talk dgram udp wait root /libexec/talkd talkd
- An entry has this format:
- SERVICE STYLE PROTOCOL WAIT USERNAME PROGRAM ARGUMENTS
- The SERVICE field says which service this program provides. It
- should be the name of a service defined in ‘/etc/services’. ‘inetd’
- uses SERVICE to decide which port to listen on for this entry.
- The fields STYLE and PROTOCOL specify the communication style and the
- protocol to use for the listening socket. The style should be the name
- of a communication style, converted to lower case and with ‘SOCK_’
- deleted—for example, ‘stream’ or ‘dgram’. PROTOCOL should be one of the
- protocols listed in ‘/etc/protocols’. The typical protocol names are
- ‘tcp’ for byte stream connections and ‘udp’ for unreliable datagrams.
- The WAIT field should be either ‘wait’ or ‘nowait’. Use ‘wait’ if
- STYLE is a connectionless style and the server, once started, handles
- multiple requests as they come in. Use ‘nowait’ if ‘inetd’ should start
- a new process for each message or request that comes in. If STYLE uses
- connections, then WAIT *must* be ‘nowait’.
- USER is the user name that the server should run as. ‘inetd’ runs as
- root, so it can set the user ID of its children arbitrarily. It’s best
- to avoid using ‘root’ for USER if you can; but some servers, such as
- Telnet and FTP, read a username and password themselves. These servers
- need to be root initially so they can log in as commanded by the data
- coming over the network.
- PROGRAM together with ARGUMENTS specifies the command to run to start
- the server. PROGRAM should be an absolute file name specifying the
- executable file to run. ARGUMENTS consists of any number of
- whitespace-separated words, which become the command-line arguments of
- PROGRAM. The first word in ARGUMENTS is argument zero, which should by
- convention be the program name itself (sans directories).
- If you edit ‘/etc/inetd.conf’, you can tell ‘inetd’ to reread the
- file and obey its new contents by sending the ‘inetd’ process the
- ‘SIGHUP’ signal. You’ll have to use ‘ps’ to determine the process ID of
- the ‘inetd’ process as it is not fixed.
- File: libc.info, Node: Socket Options, Next: Networks Database, Prev: Inetd, Up: Sockets
- 16.12 Socket Options
- ====================
- This section describes how to read or set various options that modify
- the behavior of sockets and their underlying communications protocols.
- When you are manipulating a socket option, you must specify which
- "level" the option pertains to. This describes whether the option
- applies to the socket interface, or to a lower-level communications
- protocol interface.
- * Menu:
- * Socket Option Functions:: The basic functions for setting and getting
- socket options.
- * Socket-Level Options:: Details of the options at the socket level.
- File: libc.info, Node: Socket Option Functions, Next: Socket-Level Options, Up: Socket Options
- 16.12.1 Socket Option Functions
- -------------------------------
- Here are the functions for examining and modifying socket options. They
- are declared in ‘sys/socket.h’.
- -- Function: int getsockopt (int SOCKET, int LEVEL, int OPTNAME, void
- *OPTVAL, socklen_t *OPTLEN-PTR)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- The ‘getsockopt’ function gets information about the value of
- option OPTNAME at level LEVEL for socket SOCKET.
- The option value is stored in the buffer that OPTVAL points to.
- Before the call, you should supply in ‘*OPTLEN-PTR’ the size of
- this buffer; on return, it contains the number of bytes of
- information actually stored in the buffer.
- Most options interpret the OPTVAL buffer as a single ‘int’ value.
- The actual return value of ‘getsockopt’ is ‘0’ on success and ‘-1’
- on failure. The following ‘errno’ error conditions are defined:
- ‘EBADF’
- The SOCKET argument is not a valid file descriptor.
- ‘ENOTSOCK’
- The descriptor SOCKET is not a socket.
- ‘ENOPROTOOPT’
- The OPTNAME doesn’t make sense for the given LEVEL.
- -- Function: int setsockopt (int SOCKET, int LEVEL, int OPTNAME, const
- void *OPTVAL, socklen_t OPTLEN)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function is used to set the socket option OPTNAME at level
- LEVEL for socket SOCKET. The value of the option is passed in the
- buffer OPTVAL of size OPTLEN.
- The return value and error codes for ‘setsockopt’ are the same as
- for ‘getsockopt’.
- File: libc.info, Node: Socket-Level Options, Prev: Socket Option Functions, Up: Socket Options
- 16.12.2 Socket-Level Options
- ----------------------------
- -- Constant: int SOL_SOCKET
- Use this constant as the LEVEL argument to ‘getsockopt’ or
- ‘setsockopt’ to manipulate the socket-level options described in
- this section.
- Here is a table of socket-level option names; all are defined in the
- header file ‘sys/socket.h’.
- ‘SO_DEBUG’
- This option toggles recording of debugging information in the
- underlying protocol modules. The value has type ‘int’; a nonzero
- value means “yes”.
- ‘SO_REUSEADDR’
- This option controls whether ‘bind’ (*note Setting Address::)
- should permit reuse of local addresses for this socket. If you
- enable this option, you can actually have two sockets with the same
- Internet port number; but the system won’t allow you to use the two
- identically-named sockets in a way that would confuse the Internet.
- The reason for this option is that some higher-level Internet
- protocols, including FTP, require you to keep reusing the same port
- number.
- The value has type ‘int’; a nonzero value means “yes”.
- ‘SO_KEEPALIVE’
- This option controls whether the underlying protocol should
- periodically transmit messages on a connected socket. If the peer
- fails to respond to these messages, the connection is considered
- broken. The value has type ‘int’; a nonzero value means “yes”.
- ‘SO_DONTROUTE’
- This option controls whether outgoing messages bypass the normal
- message routing facilities. If set, messages are sent directly to
- the network interface instead. The value has type ‘int’; a nonzero
- value means “yes”.
- ‘SO_LINGER’
- This option specifies what should happen when the socket of a type
- that promises reliable delivery still has untransmitted messages
- when it is closed; see *note Closing a Socket::. The value has
- type ‘struct linger’.
- -- Data Type: struct linger
- This structure type has the following members:
- ‘int l_onoff’
- This field is interpreted as a boolean. If nonzero,
- ‘close’ blocks until the data are transmitted or the
- timeout period has expired.
- ‘int l_linger’
- This specifies the timeout period, in seconds.
- ‘SO_BROADCAST’
- This option controls whether datagrams may be broadcast from the
- socket. The value has type ‘int’; a nonzero value means “yes”.
- ‘SO_OOBINLINE’
- If this option is set, out-of-band data received on the socket is
- placed in the normal input queue. This permits it to be read using
- ‘read’ or ‘recv’ without specifying the ‘MSG_OOB’ flag. *Note
- Out-of-Band Data::. The value has type ‘int’; a nonzero value
- means “yes”.
- ‘SO_SNDBUF’
- This option gets or sets the size of the output buffer. The value
- is a ‘size_t’, which is the size in bytes.
- ‘SO_RCVBUF’
- This option gets or sets the size of the input buffer. The value
- is a ‘size_t’, which is the size in bytes.
- ‘SO_STYLE’
- ‘SO_TYPE’
- This option can be used with ‘getsockopt’ only. It is used to get
- the socket’s communication style. ‘SO_TYPE’ is the historical
- name, and ‘SO_STYLE’ is the preferred name in GNU. The value has
- type ‘int’ and its value designates a communication style; see
- *note Communication Styles::.
- ‘SO_ERROR’
- This option can be used with ‘getsockopt’ only. It is used to
- reset the error status of the socket. The value is an ‘int’, which
- represents the previous error status.
- File: libc.info, Node: Networks Database, Prev: Socket Options, Up: Sockets
- 16.13 Networks Database
- =======================
- Many systems come with a database that records a list of networks known
- to the system developer. This is usually kept either in the file
- ‘/etc/networks’ or in an equivalent from a name server. This data base
- is useful for routing programs such as ‘route’, but it is not useful for
- programs that simply communicate over the network. We provide functions
- to access this database, which are declared in ‘netdb.h’.
- -- Data Type: struct netent
- This data type is used to represent information about entries in
- the networks database. It has the following members:
- ‘char *n_name’
- This is the “official” name of the network.
- ‘char **n_aliases’
- These are alternative names for the network, represented as a
- vector of strings. A null pointer terminates the array.
- ‘int n_addrtype’
- This is the type of the network number; this is always equal
- to ‘AF_INET’ for Internet networks.
- ‘unsigned long int n_net’
- This is the network number. Network numbers are returned in
- host byte order; see *note Byte Order::.
- Use the ‘getnetbyname’ or ‘getnetbyaddr’ functions to search the
- networks database for information about a specific network. The
- information is returned in a statically-allocated structure; you must
- copy the information if you need to save it.
- -- Function: struct netent * getnetbyname (const char *NAME)
- Preliminary: | MT-Unsafe race:netbyname env locale | AS-Unsafe
- dlopen plugin heap lock | AC-Unsafe corrupt lock fd mem | *Note
- POSIX Safety Concepts::.
- The ‘getnetbyname’ function returns information about the network
- named NAME. It returns a null pointer if there is no such network.
- -- Function: struct netent * getnetbyaddr (uint32_t NET, int TYPE)
- Preliminary: | MT-Unsafe race:netbyaddr locale | AS-Unsafe dlopen
- plugin heap lock | AC-Unsafe corrupt lock fd mem | *Note POSIX
- Safety Concepts::.
- The ‘getnetbyaddr’ function returns information about the network
- of type TYPE with number NET. You should specify a value of
- ‘AF_INET’ for the TYPE argument for Internet networks.
- ‘getnetbyaddr’ returns a null pointer if there is no such network.
- You can also scan the networks database using ‘setnetent’,
- ‘getnetent’ and ‘endnetent’. Be careful when using these functions
- because they are not reentrant.
- -- Function: void setnetent (int STAYOPEN)
- Preliminary: | MT-Unsafe race:netent env locale | AS-Unsafe dlopen
- plugin heap lock | AC-Unsafe corrupt lock fd mem | *Note POSIX
- Safety Concepts::.
- This function opens and rewinds the networks database.
- If the STAYOPEN argument is nonzero, this sets a flag so that
- subsequent calls to ‘getnetbyname’ or ‘getnetbyaddr’ will not close
- the database (as they usually would). This makes for more
- efficiency if you call those functions several times, by avoiding
- reopening the database for each call.
- -- Function: struct netent * getnetent (void)
- Preliminary: | MT-Unsafe race:netent race:netentbuf env locale |
- AS-Unsafe dlopen plugin heap lock | AC-Unsafe corrupt lock fd mem |
- *Note POSIX Safety Concepts::.
- This function returns the next entry in the networks database. It
- returns a null pointer if there are no more entries.
- -- Function: void endnetent (void)
- Preliminary: | MT-Unsafe race:netent env locale | AS-Unsafe dlopen
- plugin heap lock | AC-Unsafe corrupt lock fd mem | *Note POSIX
- Safety Concepts::.
- This function closes the networks database.
- File: libc.info, Node: Low-Level Terminal Interface, Next: Syslog, Prev: Sockets, Up: Top
- 17 Low-Level Terminal Interface
- *******************************
- This chapter describes functions that are specific to terminal devices.
- You can use these functions to do things like turn off input echoing;
- set serial line characteristics such as line speed and flow control; and
- change which characters are used for end-of-file, command-line editing,
- sending signals, and similar control functions.
- Most of the functions in this chapter operate on file descriptors.
- *Note Low-Level I/O::, for more information about what a file descriptor
- is and how to open a file descriptor for a terminal device.
- * Menu:
- * Is It a Terminal:: How to determine if a file is a terminal
- device, and what its name is.
- * I/O Queues:: About flow control and typeahead.
- * Canonical or Not:: Two basic styles of input processing.
- * Terminal Modes:: How to examine and modify flags controlling
- details of terminal I/O: echoing,
- signals, editing. Posix.
- * BSD Terminal Modes:: BSD compatible terminal mode setting
- * Line Control:: Sending break sequences, clearing
- terminal buffers …
- * Noncanon Example:: How to read single characters without echo.
- * Pseudo-Terminals:: How to open a pseudo-terminal.
- File: libc.info, Node: Is It a Terminal, Next: I/O Queues, Up: Low-Level Terminal Interface
- 17.1 Identifying Terminals
- ==========================
- The functions described in this chapter only work on files that
- correspond to terminal devices. You can find out whether a file
- descriptor is associated with a terminal by using the ‘isatty’ function.
- Prototypes for the functions in this section are declared in the
- header file ‘unistd.h’.
- -- Function: int isatty (int FILEDES)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function returns ‘1’ if FILEDES is a file descriptor
- associated with an open terminal device, and 0 otherwise.
- If a file descriptor is associated with a terminal, you can get its
- associated file name using the ‘ttyname’ function. See also the
- ‘ctermid’ function, described in *note Identifying the Terminal::.
- -- Function: char * ttyname (int FILEDES)
- Preliminary: | MT-Unsafe race:ttyname | AS-Unsafe heap lock |
- AC-Unsafe lock fd mem | *Note POSIX Safety Concepts::.
- If the file descriptor FILEDES is associated with a terminal
- device, the ‘ttyname’ function returns a pointer to a
- statically-allocated, null-terminated string containing the file
- name of the terminal file. The value is a null pointer if the file
- descriptor isn’t associated with a terminal, or the file name
- cannot be determined.
- -- Function: int ttyname_r (int FILEDES, char *BUF, size_t LEN)
- Preliminary: | MT-Safe | AS-Unsafe heap | AC-Unsafe mem fd | *Note
- POSIX Safety Concepts::.
- The ‘ttyname_r’ function is similar to the ‘ttyname’ function
- except that it places its result into the user-specified buffer
- starting at BUF with length LEN.
- The normal return value from ‘ttyname_r’ is 0. Otherwise an error
- number is returned to indicate the error. The following ‘errno’
- error conditions are defined for this function:
- ‘EBADF’
- The FILEDES argument is not a valid file descriptor.
- ‘ENOTTY’
- The FILEDES is not associated with a terminal.
- ‘ERANGE’
- The buffer length LEN is too small to store the string to be
- returned.
- File: libc.info, Node: I/O Queues, Next: Canonical or Not, Prev: Is It a Terminal, Up: Low-Level Terminal Interface
- 17.2 I/O Queues
- ===============
- Many of the remaining functions in this section refer to the input and
- output queues of a terminal device. These queues implement a form of
- buffering _within the kernel_ independent of the buffering implemented
- by I/O streams (*note I/O on Streams::).
- The "terminal input queue" is also sometimes referred to as its
- "typeahead buffer". It holds the characters that have been received
- from the terminal but not yet read by any process.
- The size of the input queue is described by the ‘MAX_INPUT’ and ‘_POSIX_MAX_INPUT’
- parameters; see *note Limits for Files::. You are guaranteed a queue
- size of at least ‘MAX_INPUT’, but the queue might be larger, and might
- even dynamically change size. If input flow control is enabled by
- setting the ‘IXOFF’ input mode bit (*note Input Modes::), the terminal
- driver transmits STOP and START characters to the terminal when
- necessary to prevent the queue from overflowing. Otherwise, input may
- be lost if it comes in too fast from the terminal. In canonical mode,
- all input stays in the queue until a newline character is received, so
- the terminal input queue can fill up when you type a very long line.
- *Note Canonical or Not::.
- The "terminal output queue" is like the input queue, but for output;
- it contains characters that have been written by processes, but not yet
- transmitted to the terminal. If output flow control is enabled by
- setting the ‘IXON’ input mode bit (*note Input Modes::), the terminal
- driver obeys START and STOP characters sent by the terminal to stop and
- restart transmission of output.
- "Clearing" the terminal input queue means discarding any characters
- that have been received but not yet read. Similarly, clearing the
- terminal output queue means discarding any characters that have been
- written but not yet transmitted.
- File: libc.info, Node: Canonical or Not, Next: Terminal Modes, Prev: I/O Queues, Up: Low-Level Terminal Interface
- 17.3 Two Styles of Input: Canonical or Not
- ==========================================
- POSIX systems support two basic modes of input: canonical and
- noncanonical.
- In "canonical input processing" mode, terminal input is processed in
- lines terminated by newline (‘'\n'’), EOF, or EOL characters. No input
- can be read until an entire line has been typed by the user, and the
- ‘read’ function (*note I/O Primitives::) returns at most a single line
- of input, no matter how many bytes are requested.
- In canonical input mode, the operating system provides input editing
- facilities: some characters are interpreted specially to perform editing
- operations within the current line of text, such as ERASE and KILL.
- *Note Editing Characters::.
- The constants ‘_POSIX_MAX_CANON’ and ‘MAX_CANON’ parameterize the
- maximum number of bytes which may appear in a single line of canonical
- input. *Note Limits for Files::. You are guaranteed a maximum line
- length of at least ‘MAX_CANON’ bytes, but the maximum might be larger,
- and might even dynamically change size.
- In "noncanonical input processing" mode, characters are not grouped
- into lines, and ERASE and KILL processing is not performed. The
- granularity with which bytes are read in noncanonical input mode is
- controlled by the MIN and TIME settings. *Note Noncanonical Input::.
- Most programs use canonical input mode, because this gives the user a
- way to edit input line by line. The usual reason to use noncanonical
- mode is when the program accepts single-character commands or provides
- its own editing facilities.
- The choice of canonical or noncanonical input is controlled by the
- ‘ICANON’ flag in the ‘c_lflag’ member of ‘struct termios’. *Note Local
- Modes::.
- File: libc.info, Node: Terminal Modes, Next: BSD Terminal Modes, Prev: Canonical or Not, Up: Low-Level Terminal Interface
- 17.4 Terminal Modes
- ===================
- This section describes the various terminal attributes that control how
- input and output are done. The functions, data structures, and symbolic
- constants are all declared in the header file ‘termios.h’.
- Don’t confuse terminal attributes with file attributes. A device
- special file which is associated with a terminal has file attributes as
- described in *note File Attributes::. These are unrelated to the
- attributes of the terminal device itself, which are discussed in this
- section.
- * Menu:
- * Mode Data Types:: The data type ‘struct termios’ and
- related types.
- * Mode Functions:: Functions to read and set the terminal
- attributes.
- * Setting Modes:: The right way to set terminal attributes
- reliably.
- * Input Modes:: Flags controlling low-level input handling.
- * Output Modes:: Flags controlling low-level output handling.
- * Control Modes:: Flags controlling serial port behavior.
- * Local Modes:: Flags controlling high-level input handling.
- * Line Speed:: How to read and set the terminal line speed.
- * Special Characters:: Characters that have special effects,
- and how to change them.
- * Noncanonical Input:: Controlling how long to wait for input.
- File: libc.info, Node: Mode Data Types, Next: Mode Functions, Up: Terminal Modes
- 17.4.1 Terminal Mode Data Types
- -------------------------------
- The entire collection of attributes of a terminal is stored in a
- structure of type ‘struct termios’. This structure is used with the
- functions ‘tcgetattr’ and ‘tcsetattr’ to read and set the attributes.
- -- Data Type: struct termios
- A ‘struct termios’ records all the I/O attributes of a terminal.
- The structure includes at least the following members:
- ‘tcflag_t c_iflag’
- A bit mask specifying flags for input modes; see *note Input
- Modes::.
- ‘tcflag_t c_oflag’
- A bit mask specifying flags for output modes; see *note Output
- Modes::.
- ‘tcflag_t c_cflag’
- A bit mask specifying flags for control modes; see *note
- Control Modes::.
- ‘tcflag_t c_lflag’
- A bit mask specifying flags for local modes; see *note Local
- Modes::.
- ‘cc_t c_cc[NCCS]’
- An array specifying which characters are associated with
- various control functions; see *note Special Characters::.
- The ‘struct termios’ structure also contains members which encode
- input and output transmission speeds, but the representation is not
- specified. *Note Line Speed::, for how to examine and store the
- speed values.
- The following sections describe the details of the members of the
- ‘struct termios’ structure.
- -- Data Type: tcflag_t
- This is an unsigned integer type used to represent the various bit
- masks for terminal flags.
- -- Data Type: cc_t
- This is an unsigned integer type used to represent characters
- associated with various terminal control functions.
- -- Macro: int NCCS
- The value of this macro is the number of elements in the ‘c_cc’
- array.
- File: libc.info, Node: Mode Functions, Next: Setting Modes, Prev: Mode Data Types, Up: Terminal Modes
- 17.4.2 Terminal Mode Functions
- ------------------------------
- -- Function: int tcgetattr (int FILEDES, struct termios *TERMIOS-P)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function is used to examine the attributes of the terminal
- device with file descriptor FILEDES. The attributes are returned
- in the structure that TERMIOS-P points to.
- If successful, ‘tcgetattr’ returns 0. A return value of -1
- indicates an error. The following ‘errno’ error conditions are
- defined for this function:
- ‘EBADF’
- The FILEDES argument is not a valid file descriptor.
- ‘ENOTTY’
- The FILEDES is not associated with a terminal.
- -- Function: int tcsetattr (int FILEDES, int WHEN, const struct termios
- *TERMIOS-P)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function sets the attributes of the terminal device with file
- descriptor FILEDES. The new attributes are taken from the
- structure that TERMIOS-P points to.
- The WHEN argument specifies how to deal with input and output
- already queued. It can be one of the following values:
- ‘TCSANOW’
- Make the change immediately.
- ‘TCSADRAIN’
- Make the change after waiting until all queued output has been
- written. You should usually use this option when changing
- parameters that affect output.
- ‘TCSAFLUSH’
- This is like ‘TCSADRAIN’, but also discards any queued input.
- ‘TCSASOFT’
- This is a flag bit that you can add to any of the above
- alternatives. Its meaning is to inhibit alteration of the
- state of the terminal hardware. It is a BSD extension; it is
- only supported on BSD systems and GNU/Hurd systems.
- Using ‘TCSASOFT’ is exactly the same as setting the ‘CIGNORE’
- bit in the ‘c_cflag’ member of the structure TERMIOS-P points
- to. *Note Control Modes::, for a description of ‘CIGNORE’.
- If this function is called from a background process on its
- controlling terminal, normally all processes in the process group
- are sent a ‘SIGTTOU’ signal, in the same way as if the process were
- trying to write to the terminal. The exception is if the calling
- process itself is ignoring or blocking ‘SIGTTOU’ signals, in which
- case the operation is performed and no signal is sent. *Note Job
- Control::.
- If successful, ‘tcsetattr’ returns 0. A return value of -1
- indicates an error. The following ‘errno’ error conditions are
- defined for this function:
- ‘EBADF’
- The FILEDES argument is not a valid file descriptor.
- ‘ENOTTY’
- The FILEDES is not associated with a terminal.
- ‘EINVAL’
- Either the value of the ‘when’ argument is not valid, or there
- is something wrong with the data in the TERMIOS-P argument.
- Although ‘tcgetattr’ and ‘tcsetattr’ specify the terminal device with
- a file descriptor, the attributes are those of the terminal device
- itself and not of the file descriptor. This means that the effects of
- changing terminal attributes are persistent; if another process opens
- the terminal file later on, it will see the changed attributes even
- though it doesn’t have anything to do with the open file descriptor you
- originally specified in changing the attributes.
- Similarly, if a single process has multiple or duplicated file
- descriptors for the same terminal device, changing the terminal
- attributes affects input and output to all of these file descriptors.
- This means, for example, that you can’t open one file descriptor or
- stream to read from a terminal in the normal line-buffered, echoed mode;
- and simultaneously have another file descriptor for the same terminal
- that you use to read from it in single-character, non-echoed mode.
- Instead, you have to explicitly switch the terminal back and forth
- between the two modes.
- File: libc.info, Node: Setting Modes, Next: Input Modes, Prev: Mode Functions, Up: Terminal Modes
- 17.4.3 Setting Terminal Modes Properly
- --------------------------------------
- When you set terminal modes, you should call ‘tcgetattr’ first to get
- the current modes of the particular terminal device, modify only those
- modes that you are really interested in, and store the result with
- ‘tcsetattr’.
- It’s a bad idea to simply initialize a ‘struct termios’ structure to
- a chosen set of attributes and pass it directly to ‘tcsetattr’. Your
- program may be run years from now, on systems that support members not
- documented in this manual. The way to avoid setting these members to
- unreasonable values is to avoid changing them.
- What’s more, different terminal devices may require different mode
- settings in order to function properly. So you should avoid blindly
- copying attributes from one terminal device to another.
- When a member contains a collection of independent flags, as the
- ‘c_iflag’, ‘c_oflag’ and ‘c_cflag’ members do, even setting the entire
- member is a bad idea, because particular operating systems have their
- own flags. Instead, you should start with the current value of the
- member and alter only the flags whose values matter in your program,
- leaving any other flags unchanged.
- Here is an example of how to set one flag (‘ISTRIP’) in the ‘struct
- termios’ structure while properly preserving all the other data in the
- structure:
- int
- set_istrip (int desc, int value)
- {
- struct termios settings;
- int result;
- result = tcgetattr (desc, &settings);
- if (result < 0)
- {
- perror ("error in tcgetattr");
- return 0;
- }
- settings.c_iflag &= ~ISTRIP;
- if (value)
- settings.c_iflag |= ISTRIP;
- result = tcsetattr (desc, TCSANOW, &settings);
- if (result < 0)
- {
- perror ("error in tcsetattr");
- return 0;
- }
- return 1;
- }
- File: libc.info, Node: Input Modes, Next: Output Modes, Prev: Setting Modes, Up: Terminal Modes
- 17.4.4 Input Modes
- ------------------
- This section describes the terminal attribute flags that control fairly
- low-level aspects of input processing: handling of parity errors, break
- signals, flow control, and <RET> and <LFD> characters.
- All of these flags are bits in the ‘c_iflag’ member of the ‘struct
- termios’ structure. The member is an integer, and you change flags
- using the operators ‘&’, ‘|’ and ‘^’. Don’t try to specify the entire
- value for ‘c_iflag’—instead, change only specific flags and leave the
- rest untouched (*note Setting Modes::).
- -- Macro: tcflag_t INPCK
- If this bit is set, input parity checking is enabled. If it is not
- set, no checking at all is done for parity errors on input; the
- characters are simply passed through to the application.
- Parity checking on input processing is independent of whether
- parity detection and generation on the underlying terminal hardware
- is enabled; see *note Control Modes::. For example, you could
- clear the ‘INPCK’ input mode flag and set the ‘PARENB’ control mode
- flag to ignore parity errors on input, but still generate parity on
- output.
- If this bit is set, what happens when a parity error is detected
- depends on whether the ‘IGNPAR’ or ‘PARMRK’ bits are set. If
- neither of these bits are set, a byte with a parity error is passed
- to the application as a ‘'\0'’ character.
- -- Macro: tcflag_t IGNPAR
- If this bit is set, any byte with a framing or parity error is
- ignored. This is only useful if ‘INPCK’ is also set.
- -- Macro: tcflag_t PARMRK
- If this bit is set, input bytes with parity or framing errors are
- marked when passed to the program. This bit is meaningful only
- when ‘INPCK’ is set and ‘IGNPAR’ is not set.
- The way erroneous bytes are marked is with two preceding bytes,
- ‘377’ and ‘0’. Thus, the program actually reads three bytes for
- one erroneous byte received from the terminal.
- If a valid byte has the value ‘0377’, and ‘ISTRIP’ (see below) is
- not set, the program might confuse it with the prefix that marks a
- parity error. So a valid byte ‘0377’ is passed to the program as
- two bytes, ‘0377’ ‘0377’, in this case.
- -- Macro: tcflag_t ISTRIP
- If this bit is set, valid input bytes are stripped to seven bits;
- otherwise, all eight bits are available for programs to read.
- -- Macro: tcflag_t IGNBRK
- If this bit is set, break conditions are ignored.
- A "break condition" is defined in the context of asynchronous
- serial data transmission as a series of zero-value bits longer than
- a single byte.
- -- Macro: tcflag_t BRKINT
- If this bit is set and ‘IGNBRK’ is not set, a break condition
- clears the terminal input and output queues and raises a ‘SIGINT’
- signal for the foreground process group associated with the
- terminal.
- If neither ‘BRKINT’ nor ‘IGNBRK’ are set, a break condition is
- passed to the application as a single ‘'\0'’ character if ‘PARMRK’
- is not set, or otherwise as a three-character sequence ‘'\377'’,
- ‘'\0'’, ‘'\0'’.
- -- Macro: tcflag_t IGNCR
- If this bit is set, carriage return characters (‘'\r'’) are
- discarded on input. Discarding carriage return may be useful on
- terminals that send both carriage return and linefeed when you type
- the <RET> key.
- -- Macro: tcflag_t ICRNL
- If this bit is set and ‘IGNCR’ is not set, carriage return
- characters (‘'\r'’) received as input are passed to the application
- as newline characters (‘'\n'’).
- -- Macro: tcflag_t INLCR
- If this bit is set, newline characters (‘'\n'’) received as input
- are passed to the application as carriage return characters
- (‘'\r'’).
- -- Macro: tcflag_t IXOFF
- If this bit is set, start/stop control on input is enabled. In
- other words, the computer sends STOP and START characters as
- necessary to prevent input from coming in faster than programs are
- reading it. The idea is that the actual terminal hardware that is
- generating the input data responds to a STOP character by
- suspending transmission, and to a START character by resuming
- transmission. *Note Start/Stop Characters::.
- -- Macro: tcflag_t IXON
- If this bit is set, start/stop control on output is enabled. In
- other words, if the computer receives a STOP character, it suspends
- output until a START character is received. In this case, the STOP
- and START characters are never passed to the application program.
- If this bit is not set, then START and STOP can be read as ordinary
- characters. *Note Start/Stop Characters::.
- -- Macro: tcflag_t IXANY
- If this bit is set, any input character restarts output when output
- has been suspended with the STOP character. Otherwise, only the
- START character restarts output.
- This is a BSD extension; it exists only on BSD systems and
- GNU/Linux and GNU/Hurd systems.
- -- Macro: tcflag_t IMAXBEL
- If this bit is set, then filling up the terminal input buffer sends
- a BEL character (code ‘007’) to the terminal to ring the bell.
- This is a BSD extension.
- File: libc.info, Node: Output Modes, Next: Control Modes, Prev: Input Modes, Up: Terminal Modes
- 17.4.5 Output Modes
- -------------------
- This section describes the terminal flags and fields that control how
- output characters are translated and padded for display. All of these
- are contained in the ‘c_oflag’ member of the ‘struct termios’ structure.
- The ‘c_oflag’ member itself is an integer, and you change the flags
- and fields using the operators ‘&’, ‘|’, and ‘^’. Don’t try to specify
- the entire value for ‘c_oflag’—instead, change only specific flags and
- leave the rest untouched (*note Setting Modes::).
- -- Macro: tcflag_t OPOST
- If this bit is set, output data is processed in some unspecified
- way so that it is displayed appropriately on the terminal device.
- This typically includes mapping newline characters (‘'\n'’) onto
- carriage return and linefeed pairs.
- If this bit isn’t set, the characters are transmitted as-is.
- The following three bits are effective only if ‘OPOST’ is set.
- -- Macro: tcflag_t ONLCR
- If this bit is set, convert the newline character on output into a
- pair of characters, carriage return followed by linefeed.
- -- Macro: tcflag_t OXTABS
- If this bit is set, convert tab characters on output into the
- appropriate number of spaces to emulate a tab stop every eight
- columns. This bit exists only on BSD systems and GNU/Hurd systems;
- on GNU/Linux systems it is available as ‘XTABS’.
- -- Macro: tcflag_t ONOEOT
- If this bit is set, discard ‘C-d’ characters (code ‘004’) on
- output. These characters cause many dial-up terminals to
- disconnect. This bit exists only on BSD systems and GNU/Hurd
- systems.
- File: libc.info, Node: Control Modes, Next: Local Modes, Prev: Output Modes, Up: Terminal Modes
- 17.4.6 Control Modes
- --------------------
- This section describes the terminal flags and fields that control
- parameters usually associated with asynchronous serial data
- transmission. These flags may not make sense for other kinds of
- terminal ports (such as a network connection pseudo-terminal). All of
- these are contained in the ‘c_cflag’ member of the ‘struct termios’
- structure.
- The ‘c_cflag’ member itself is an integer, and you change the flags
- and fields using the operators ‘&’, ‘|’, and ‘^’. Don’t try to specify
- the entire value for ‘c_cflag’—instead, change only specific flags and
- leave the rest untouched (*note Setting Modes::).
- -- Macro: tcflag_t CLOCAL
- If this bit is set, it indicates that the terminal is connected
- “locally” and that the modem status lines (such as carrier detect)
- should be ignored.
- On many systems if this bit is not set and you call ‘open’ without
- the ‘O_NONBLOCK’ flag set, ‘open’ blocks until a modem connection
- is established.
- If this bit is not set and a modem disconnect is detected, a
- ‘SIGHUP’ signal is sent to the controlling process group for the
- terminal (if it has one). Normally, this causes the process to
- exit; see *note Signal Handling::. Reading from the terminal after
- a disconnect causes an end-of-file condition, and writing causes an
- ‘EIO’ error to be returned. The terminal device must be closed and
- reopened to clear the condition.
- -- Macro: tcflag_t HUPCL
- If this bit is set, a modem disconnect is generated when all
- processes that have the terminal device open have either closed the
- file or exited.
- -- Macro: tcflag_t CREAD
- If this bit is set, input can be read from the terminal.
- Otherwise, input is discarded when it arrives.
- -- Macro: tcflag_t CSTOPB
- If this bit is set, two stop bits are used. Otherwise, only one
- stop bit is used.
- -- Macro: tcflag_t PARENB
- If this bit is set, generation and detection of a parity bit are
- enabled. *Note Input Modes::, for information on how input parity
- errors are handled.
- If this bit is not set, no parity bit is added to output
- characters, and input characters are not checked for correct
- parity.
- -- Macro: tcflag_t PARODD
- This bit is only useful if ‘PARENB’ is set. If ‘PARODD’ is set,
- odd parity is used, otherwise even parity is used.
- The control mode flags also includes a field for the number of bits
- per character. You can use the ‘CSIZE’ macro as a mask to extract the
- value, like this: ‘settings.c_cflag & CSIZE’.
- -- Macro: tcflag_t CSIZE
- This is a mask for the number of bits per character.
- -- Macro: tcflag_t CS5
- This specifies five bits per byte.
- -- Macro: tcflag_t CS6
- This specifies six bits per byte.
- -- Macro: tcflag_t CS7
- This specifies seven bits per byte.
- -- Macro: tcflag_t CS8
- This specifies eight bits per byte.
- The following four bits are BSD extensions; these exist only on BSD
- systems and GNU/Hurd systems.
- -- Macro: tcflag_t CCTS_OFLOW
- If this bit is set, enable flow control of output based on the CTS
- wire (RS232 protocol).
- -- Macro: tcflag_t CRTS_IFLOW
- If this bit is set, enable flow control of input based on the RTS
- wire (RS232 protocol).
- -- Macro: tcflag_t MDMBUF
- If this bit is set, enable carrier-based flow control of output.
- -- Macro: tcflag_t CIGNORE
- If this bit is set, it says to ignore the control modes and line
- speed values entirely. This is only meaningful in a call to
- ‘tcsetattr’.
- The ‘c_cflag’ member and the line speed values returned by
- ‘cfgetispeed’ and ‘cfgetospeed’ will be unaffected by the call.
- ‘CIGNORE’ is useful if you want to set all the software modes in
- the other members, but leave the hardware details in ‘c_cflag’
- unchanged. (This is how the ‘TCSASOFT’ flag to ‘tcsettattr’
- works.)
- This bit is never set in the structure filled in by ‘tcgetattr’.
- File: libc.info, Node: Local Modes, Next: Line Speed, Prev: Control Modes, Up: Terminal Modes
- 17.4.7 Local Modes
- ------------------
- This section describes the flags for the ‘c_lflag’ member of the ‘struct
- termios’ structure. These flags generally control higher-level aspects
- of input processing than the input modes flags described in *note Input
- Modes::, such as echoing, signals, and the choice of canonical or
- noncanonical input.
- The ‘c_lflag’ member itself is an integer, and you change the flags
- and fields using the operators ‘&’, ‘|’, and ‘^’. Don’t try to specify
- the entire value for ‘c_lflag’—instead, change only specific flags and
- leave the rest untouched (*note Setting Modes::).
- -- Macro: tcflag_t ICANON
- This bit, if set, enables canonical input processing mode.
- Otherwise, input is processed in noncanonical mode. *Note
- Canonical or Not::.
- -- Macro: tcflag_t ECHO
- If this bit is set, echoing of input characters back to the
- terminal is enabled.
- -- Macro: tcflag_t ECHOE
- If this bit is set, echoing indicates erasure of input with the
- ERASE character by erasing the last character in the current line
- from the screen. Otherwise, the character erased is re-echoed to
- show what has happened (suitable for a printing terminal).
- This bit only controls the display behavior; the ‘ICANON’ bit by
- itself controls actual recognition of the ERASE character and
- erasure of input, without which ‘ECHOE’ is simply irrelevant.
- -- Macro: tcflag_t ECHOPRT
- This bit, like ‘ECHOE’, enables display of the ERASE character in a
- way that is geared to a hardcopy terminal. When you type the ERASE
- character, a ‘\’ character is printed followed by the first
- character erased. Typing the ERASE character again just prints the
- next character erased. Then, the next time you type a normal
- character, a ‘/’ character is printed before the character echoes.
- This is a BSD extension, and exists only in BSD systems and
- GNU/Linux and GNU/Hurd systems.
- -- Macro: tcflag_t ECHOK
- This bit enables special display of the KILL character by moving to
- a new line after echoing the KILL character normally. The behavior
- of ‘ECHOKE’ (below) is nicer to look at.
- If this bit is not set, the KILL character echoes just as it would
- if it were not the KILL character. Then it is up to the user to
- remember that the KILL character has erased the preceding input;
- there is no indication of this on the screen.
- This bit only controls the display behavior; the ‘ICANON’ bit by
- itself controls actual recognition of the KILL character and
- erasure of input, without which ‘ECHOK’ is simply irrelevant.
- -- Macro: tcflag_t ECHOKE
- This bit is similar to ‘ECHOK’. It enables special display of the
- KILL character by erasing on the screen the entire line that has
- been killed. This is a BSD extension, and exists only in BSD
- systems and GNU/Linux and GNU/Hurd systems.
- -- Macro: tcflag_t ECHONL
- If this bit is set and the ‘ICANON’ bit is also set, then the
- newline (‘'\n'’) character is echoed even if the ‘ECHO’ bit is not
- set.
- -- Macro: tcflag_t ECHOCTL
- If this bit is set and the ‘ECHO’ bit is also set, echo control
- characters with ‘^’ followed by the corresponding text character.
- Thus, control-A echoes as ‘^A’. This is usually the preferred mode
- for interactive input, because echoing a control character back to
- the terminal could have some undesired effect on the terminal.
- This is a BSD extension, and exists only in BSD systems and
- GNU/Linux and GNU/Hurd systems.
- -- Macro: tcflag_t ISIG
- This bit controls whether the INTR, QUIT, and SUSP characters are
- recognized. The functions associated with these characters are
- performed if and only if this bit is set. Being in canonical or
- noncanonical input mode has no effect on the interpretation of
- these characters.
- You should use caution when disabling recognition of these
- characters. Programs that cannot be interrupted interactively are
- very user-unfriendly. If you clear this bit, your program should
- provide some alternate interface that allows the user to
- interactively send the signals associated with these characters, or
- to escape from the program.
- *Note Signal Characters::.
- -- Macro: tcflag_t IEXTEN
- POSIX.1 gives ‘IEXTEN’ implementation-defined meaning, so you
- cannot rely on this interpretation on all systems.
- On BSD systems and GNU/Linux and GNU/Hurd systems, it enables the
- LNEXT and DISCARD characters. *Note Other Special::.
- -- Macro: tcflag_t NOFLSH
- Normally, the INTR, QUIT, and SUSP characters cause input and
- output queues for the terminal to be cleared. If this bit is set,
- the queues are not cleared.
- -- Macro: tcflag_t TOSTOP
- If this bit is set and the system supports job control, then
- ‘SIGTTOU’ signals are generated by background processes that
- attempt to write to the terminal. *Note Access to the Terminal::.
- The following bits are BSD extensions; they exist only on BSD systems
- and GNU/Hurd systems.
- -- Macro: tcflag_t ALTWERASE
- This bit determines how far the WERASE character should erase. The
- WERASE character erases back to the beginning of a word; the
- question is, where do words begin?
- If this bit is clear, then the beginning of a word is a
- nonwhitespace character following a whitespace character. If the
- bit is set, then the beginning of a word is an alphanumeric
- character or underscore following a character which is none of
- those.
- *Note Editing Characters::, for more information about the WERASE
- character.
- -- Macro: tcflag_t FLUSHO
- This is the bit that toggles when the user types the DISCARD
- character. While this bit is set, all output is discarded. *Note
- Other Special::.
- -- Macro: tcflag_t NOKERNINFO
- Setting this bit disables handling of the STATUS character. *Note
- Other Special::.
- -- Macro: tcflag_t PENDIN
- If this bit is set, it indicates that there is a line of input that
- needs to be reprinted. Typing the REPRINT character sets this bit;
- the bit remains set until reprinting is finished. *Note Editing
- Characters::.
- File: libc.info, Node: Line Speed, Next: Special Characters, Prev: Local Modes, Up: Terminal Modes
- 17.4.8 Line Speed
- -----------------
- The terminal line speed tells the computer how fast to read and write
- data on the terminal.
- If the terminal is connected to a real serial line, the terminal
- speed you specify actually controls the line—if it doesn’t match the
- terminal’s own idea of the speed, communication does not work. Real
- serial ports accept only certain standard speeds. Also, particular
- hardware may not support even all the standard speeds. Specifying a
- speed of zero hangs up a dialup connection and turns off modem control
- signals.
- If the terminal is not a real serial line (for example, if it is a
- network connection), then the line speed won’t really affect data
- transmission speed, but some programs will use it to determine the
- amount of padding needed. It’s best to specify a line speed value that
- matches the actual speed of the actual terminal, but you can safely
- experiment with different values to vary the amount of padding.
- There are actually two line speeds for each terminal, one for input
- and one for output. You can set them independently, but most often
- terminals use the same speed for both directions.
- The speed values are stored in the ‘struct termios’ structure, but
- don’t try to access them in the ‘struct termios’ structure directly.
- Instead, you should use the following functions to read and store them:
- -- Function: speed_t cfgetospeed (const struct termios *TERMIOS-P)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function returns the output line speed stored in the structure
- ‘*TERMIOS-P’.
- -- Function: speed_t cfgetispeed (const struct termios *TERMIOS-P)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function returns the input line speed stored in the structure
- ‘*TERMIOS-P’.
- -- Function: int cfsetospeed (struct termios *TERMIOS-P, speed_t SPEED)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function stores SPEED in ‘*TERMIOS-P’ as the output speed.
- The normal return value is 0; a value of -1 indicates an error. If
- SPEED is not a speed, ‘cfsetospeed’ returns -1.
- -- Function: int cfsetispeed (struct termios *TERMIOS-P, speed_t SPEED)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function stores SPEED in ‘*TERMIOS-P’ as the input speed. The
- normal return value is 0; a value of -1 indicates an error. If
- SPEED is not a speed, ‘cfsetospeed’ returns -1.
- -- Function: int cfsetspeed (struct termios *TERMIOS-P, speed_t SPEED)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function stores SPEED in ‘*TERMIOS-P’ as both the input and
- output speeds. The normal return value is 0; a value of -1
- indicates an error. If SPEED is not a speed, ‘cfsetspeed’ returns
- -1. This function is an extension in 4.4 BSD.
- -- Data Type: speed_t
- The ‘speed_t’ type is an unsigned integer data type used to
- represent line speeds.
- The functions ‘cfsetospeed’ and ‘cfsetispeed’ report errors only for
- speed values that the system simply cannot handle. If you specify a
- speed value that is basically acceptable, then those functions will
- succeed. But they do not check that a particular hardware device can
- actually support the specified speeds—in fact, they don’t know which
- device you plan to set the speed for. If you use ‘tcsetattr’ to set the
- speed of a particular device to a value that it cannot handle,
- ‘tcsetattr’ returns -1.
- *Portability note:* In the GNU C Library, the functions above accept
- speeds measured in bits per second as input, and return speed values
- measured in bits per second. Other libraries require speeds to be
- indicated by special codes. For POSIX.1 portability, you must use one
- of the following symbols to represent the speed; their precise numeric
- values are system-dependent, but each name has a fixed meaning: ‘B110’
- stands for 110 bps, ‘B300’ for 300 bps, and so on. There is no portable
- way to represent any speed but these, but these are the only speeds that
- typical serial lines can support.
- B0 B50 B75 B110 B134 B150 B200
- B300 B600 B1200 B1800 B2400 B4800
- B9600 B19200 B38400 B57600 B115200
- B230400 B460800
- BSD defines two additional speed symbols as aliases: ‘EXTA’ is an
- alias for ‘B19200’ and ‘EXTB’ is an alias for ‘B38400’. These aliases
- are obsolete.
- File: libc.info, Node: Special Characters, Next: Noncanonical Input, Prev: Line Speed, Up: Terminal Modes
- 17.4.9 Special Characters
- -------------------------
- In canonical input, the terminal driver recognizes a number of special
- characters which perform various control functions. These include the
- ERASE character (usually <DEL>) for editing input, and other editing
- characters. The INTR character (normally ‘C-c’) for sending a ‘SIGINT’
- signal, and other signal-raising characters, may be available in either
- canonical or noncanonical input mode. All these characters are
- described in this section.
- The particular characters used are specified in the ‘c_cc’ member of
- the ‘struct termios’ structure. This member is an array; each element
- specifies the character for a particular role. Each element has a
- symbolic constant that stands for the index of that element—for example,
- ‘VINTR’ is the index of the element that specifies the INTR character,
- so storing ‘'='’ in ‘TERMIOS.c_cc[VINTR]’ specifies ‘=’ as the INTR
- character.
- On some systems, you can disable a particular special character
- function by specifying the value ‘_POSIX_VDISABLE’ for that role. This
- value is unequal to any possible character code. *Note Options for
- Files::, for more information about how to tell whether the operating
- system you are using supports ‘_POSIX_VDISABLE’.
- * Menu:
- * Editing Characters:: Special characters that terminate lines and
- delete text, and other editing functions.
- * Signal Characters:: Special characters that send or raise signals
- to or for certain classes of processes.
- * Start/Stop Characters:: Special characters that suspend or resume
- suspended output.
- * Other Special:: Other special characters for BSD systems:
- they can discard output, and print status.
- File: libc.info, Node: Editing Characters, Next: Signal Characters, Up: Special Characters
- 17.4.9.1 Characters for Input Editing
- .....................................
- These special characters are active only in canonical input mode. *Note
- Canonical or Not::.
- -- Macro: int VEOF
- This is the subscript for the EOF character in the special control
- character array. ‘TERMIOS.c_cc[VEOF]’ holds the character itself.
- The EOF character is recognized only in canonical input mode. It
- acts as a line terminator in the same way as a newline character,
- but if the EOF character is typed at the beginning of a line it
- causes ‘read’ to return a byte count of zero, indicating
- end-of-file. The EOF character itself is discarded.
- Usually, the EOF character is ‘C-d’.
- -- Macro: int VEOL
- This is the subscript for the EOL character in the special control
- character array. ‘TERMIOS.c_cc[VEOL]’ holds the character itself.
- The EOL character is recognized only in canonical input mode. It
- acts as a line terminator, just like a newline character. The EOL
- character is not discarded; it is read as the last character in the
- input line.
- You don’t need to use the EOL character to make <RET> end a line.
- Just set the ICRNL flag. In fact, this is the default state of
- affairs.
- -- Macro: int VEOL2
- This is the subscript for the EOL2 character in the special control
- character array. ‘TERMIOS.c_cc[VEOL2]’ holds the character itself.
- The EOL2 character works just like the EOL character (see above),
- but it can be a different character. Thus, you can specify two
- characters to terminate an input line, by setting EOL to one of
- them and EOL2 to the other.
- The EOL2 character is a BSD extension; it exists only on BSD
- systems and GNU/Linux and GNU/Hurd systems.
- -- Macro: int VERASE
- This is the subscript for the ERASE character in the special
- control character array. ‘TERMIOS.c_cc[VERASE]’ holds the
- character itself.
- The ERASE character is recognized only in canonical input mode.
- When the user types the erase character, the previous character
- typed is discarded. (If the terminal generates multibyte character
- sequences, this may cause more than one byte of input to be
- discarded.) This cannot be used to erase past the beginning of the
- current line of text. The ERASE character itself is discarded.
- Usually, the ERASE character is <DEL>.
- -- Macro: int VWERASE
- This is the subscript for the WERASE character in the special
- control character array. ‘TERMIOS.c_cc[VWERASE]’ holds the
- character itself.
- The WERASE character is recognized only in canonical mode. It
- erases an entire word of prior input, and any whitespace after it;
- whitespace characters before the word are not erased.
- The definition of a “word” depends on the setting of the
- ‘ALTWERASE’ mode; *note Local Modes::.
- If the ‘ALTWERASE’ mode is not set, a word is defined as a sequence
- of any characters except space or tab.
- If the ‘ALTWERASE’ mode is set, a word is defined as a sequence of
- characters containing only letters, numbers, and underscores,
- optionally followed by one character that is not a letter, number,
- or underscore.
- The WERASE character is usually ‘C-w’.
- This is a BSD extension.
- -- Macro: int VKILL
- This is the subscript for the KILL character in the special control
- character array. ‘TERMIOS.c_cc[VKILL]’ holds the character itself.
- The KILL character is recognized only in canonical input mode.
- When the user types the kill character, the entire contents of the
- current line of input are discarded. The kill character itself is
- discarded too.
- The KILL character is usually ‘C-u’.
- -- Macro: int VREPRINT
- This is the subscript for the REPRINT character in the special
- control character array. ‘TERMIOS.c_cc[VREPRINT]’ holds the
- character itself.
- The REPRINT character is recognized only in canonical mode. It
- reprints the current input line. If some asynchronous output has
- come while you are typing, this lets you see the line you are
- typing clearly again.
- The REPRINT character is usually ‘C-r’.
- This is a BSD extension.
- File: libc.info, Node: Signal Characters, Next: Start/Stop Characters, Prev: Editing Characters, Up: Special Characters
- 17.4.9.2 Characters that Cause Signals
- ......................................
- These special characters may be active in either canonical or
- noncanonical input mode, but only when the ‘ISIG’ flag is set (*note
- Local Modes::).
- -- Macro: int VINTR
- This is the subscript for the INTR character in the special control
- character array. ‘TERMIOS.c_cc[VINTR]’ holds the character itself.
- The INTR (interrupt) character raises a ‘SIGINT’ signal for all
- processes in the foreground job associated with the terminal. The
- INTR character itself is then discarded. *Note Signal Handling::,
- for more information about signals.
- Typically, the INTR character is ‘C-c’.
- -- Macro: int VQUIT
- This is the subscript for the QUIT character in the special control
- character array. ‘TERMIOS.c_cc[VQUIT]’ holds the character itself.
- The QUIT character raises a ‘SIGQUIT’ signal for all processes in
- the foreground job associated with the terminal. The QUIT
- character itself is then discarded. *Note Signal Handling::, for
- more information about signals.
- Typically, the QUIT character is ‘C-\’.
- -- Macro: int VSUSP
- This is the subscript for the SUSP character in the special control
- character array. ‘TERMIOS.c_cc[VSUSP]’ holds the character itself.
- The SUSP (suspend) character is recognized only if the
- implementation supports job control (*note Job Control::). It
- causes a ‘SIGTSTP’ signal to be sent to all processes in the
- foreground job associated with the terminal. The SUSP character
- itself is then discarded. *Note Signal Handling::, for more
- information about signals.
- Typically, the SUSP character is ‘C-z’.
- Few applications disable the normal interpretation of the SUSP
- character. If your program does this, it should provide some other
- mechanism for the user to stop the job. When the user invokes this
- mechanism, the program should send a ‘SIGTSTP’ signal to the process
- group of the process, not just to the process itself. *Note Signaling
- Another Process::.
- -- Macro: int VDSUSP
- This is the subscript for the DSUSP character in the special
- control character array. ‘TERMIOS.c_cc[VDSUSP]’ holds the
- character itself.
- The DSUSP (suspend) character is recognized only if the
- implementation supports job control (*note Job Control::). It
- sends a ‘SIGTSTP’ signal, like the SUSP character, but not right
- away—only when the program tries to read it as input. Not all
- systems with job control support DSUSP; only BSD-compatible systems
- do (including GNU/Hurd systems).
- *Note Signal Handling::, for more information about signals.
- Typically, the DSUSP character is ‘C-y’.
- File: libc.info, Node: Start/Stop Characters, Next: Other Special, Prev: Signal Characters, Up: Special Characters
- 17.4.9.3 Special Characters for Flow Control
- ............................................
- These special characters may be active in either canonical or
- noncanonical input mode, but their use is controlled by the flags ‘IXON’
- and ‘IXOFF’ (*note Input Modes::).
- -- Macro: int VSTART
- This is the subscript for the START character in the special
- control character array. ‘TERMIOS.c_cc[VSTART]’ holds the
- character itself.
- The START character is used to support the ‘IXON’ and ‘IXOFF’ input
- modes. If ‘IXON’ is set, receiving a START character resumes
- suspended output; the START character itself is discarded. If
- ‘IXANY’ is set, receiving any character at all resumes suspended
- output; the resuming character is not discarded unless it is the
- START character. If ‘IXOFF’ is set, the system may also transmit
- START characters to the terminal.
- The usual value for the START character is ‘C-q’. You may not be
- able to change this value—the hardware may insist on using ‘C-q’
- regardless of what you specify.
- -- Macro: int VSTOP
- This is the subscript for the STOP character in the special control
- character array. ‘TERMIOS.c_cc[VSTOP]’ holds the character itself.
- The STOP character is used to support the ‘IXON’ and ‘IXOFF’ input
- modes. If ‘IXON’ is set, receiving a STOP character causes output
- to be suspended; the STOP character itself is discarded. If
- ‘IXOFF’ is set, the system may also transmit STOP characters to the
- terminal, to prevent the input queue from overflowing.
- The usual value for the STOP character is ‘C-s’. You may not be
- able to change this value—the hardware may insist on using ‘C-s’
- regardless of what you specify.
- File: libc.info, Node: Other Special, Prev: Start/Stop Characters, Up: Special Characters
- 17.4.9.4 Other Special Characters
- .................................
- -- Macro: int VLNEXT
- This is the subscript for the LNEXT character in the special
- control character array. ‘TERMIOS.c_cc[VLNEXT]’ holds the
- character itself.
- The LNEXT character is recognized only when ‘IEXTEN’ is set, but in
- both canonical and noncanonical mode. It disables any special
- significance of the next character the user types. Even if the
- character would normally perform some editing function or generate
- a signal, it is read as a plain character. This is the analogue of
- the ‘C-q’ command in Emacs. “LNEXT” stands for “literal next.”
- The LNEXT character is usually ‘C-v’.
- This character is available on BSD systems and GNU/Linux and
- GNU/Hurd systems.
- -- Macro: int VDISCARD
- This is the subscript for the DISCARD character in the special
- control character array. ‘TERMIOS.c_cc[VDISCARD]’ holds the
- character itself.
- The DISCARD character is recognized only when ‘IEXTEN’ is set, but
- in both canonical and noncanonical mode. Its effect is to toggle
- the discard-output flag. When this flag is set, all program output
- is discarded. Setting the flag also discards all output currently
- in the output buffer. Typing any other character resets the flag.
- This character is available on BSD systems and GNU/Linux and
- GNU/Hurd systems.
- -- Macro: int VSTATUS
- This is the subscript for the STATUS character in the special
- control character array. ‘TERMIOS.c_cc[VSTATUS]’ holds the
- character itself.
- The STATUS character’s effect is to print out a status message
- about how the current process is running.
- The STATUS character is recognized only in canonical mode, and only
- if ‘NOKERNINFO’ is not set.
- This character is available only on BSD systems and GNU/Hurd
- systems.
- File: libc.info, Node: Noncanonical Input, Prev: Special Characters, Up: Terminal Modes
- 17.4.10 Noncanonical Input
- --------------------------
- In noncanonical input mode, the special editing characters such as ERASE
- and KILL are ignored. The system facilities for the user to edit input
- are disabled in noncanonical mode, so that all input characters (unless
- they are special for signal or flow-control purposes) are passed to the
- application program exactly as typed. It is up to the application
- program to give the user ways to edit the input, if appropriate.
- Noncanonical mode offers special parameters called MIN and TIME for
- controlling whether and how long to wait for input to be available. You
- can even use them to avoid ever waiting—to return immediately with
- whatever input is available, or with no input.
- The MIN and TIME are stored in elements of the ‘c_cc’ array, which is
- a member of the ‘struct termios’ structure. Each element of this array
- has a particular role, and each element has a symbolic constant that
- stands for the index of that element. ‘VMIN’ and ‘VTIME’ are the names
- for the indices in the array of the MIN and TIME slots.
- -- Macro: int VMIN
- This is the subscript for the MIN slot in the ‘c_cc’ array. Thus,
- ‘TERMIOS.c_cc[VMIN]’ is the value itself.
- The MIN slot is only meaningful in noncanonical input mode; it
- specifies the minimum number of bytes that must be available in the
- input queue in order for ‘read’ to return.
- -- Macro: int VTIME
- This is the subscript for the TIME slot in the ‘c_cc’ array. Thus,
- ‘TERMIOS.c_cc[VTIME]’ is the value itself.
- The TIME slot is only meaningful in noncanonical input mode; it
- specifies how long to wait for input before returning, in units of
- 0.1 seconds.
- The MIN and TIME values interact to determine the criterion for when
- ‘read’ should return; their precise meanings depend on which of them are
- nonzero. There are four possible cases:
- • Both TIME and MIN are nonzero.
- In this case, TIME specifies how long to wait after each input
- character to see if more input arrives. After the first character
- received, ‘read’ keeps waiting until either MIN bytes have arrived
- in all, or TIME elapses with no further input.
- ‘read’ always blocks until the first character arrives, even if
- TIME elapses first. ‘read’ can return more than MIN characters if
- more than MIN happen to be in the queue.
- • Both MIN and TIME are zero.
- In this case, ‘read’ always returns immediately with as many
- characters as are available in the queue, up to the number
- requested. If no input is immediately available, ‘read’ returns a
- value of zero.
- • MIN is zero but TIME has a nonzero value.
- In this case, ‘read’ waits for time TIME for input to become
- available; the availability of a single byte is enough to satisfy
- the read request and cause ‘read’ to return. When it returns, it
- returns as many characters as are available, up to the number
- requested. If no input is available before the timer expires,
- ‘read’ returns a value of zero.
- • TIME is zero but MIN has a nonzero value.
- In this case, ‘read’ waits until at least MIN bytes are available
- in the queue. At that time, ‘read’ returns as many characters as
- are available, up to the number requested. ‘read’ can return more
- than MIN characters if more than MIN happen to be in the queue.
- What happens if MIN is 50 and you ask to read just 10 bytes?
- Normally, ‘read’ waits until there are 50 bytes in the buffer (or, more
- generally, the wait condition described above is satisfied), and then
- reads 10 of them, leaving the other 40 buffered in the operating system
- for a subsequent call to ‘read’.
- *Portability note:* On some systems, the MIN and TIME slots are
- actually the same as the EOF and EOL slots. This causes no serious
- problem because the MIN and TIME slots are used only in noncanonical
- input and the EOF and EOL slots are used only in canonical input, but it
- isn’t very clean. The GNU C Library allocates separate slots for these
- uses.
- -- Function: void cfmakeraw (struct termios *TERMIOS-P)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function provides an easy way to set up ‘*TERMIOS-P’ for what
- has traditionally been called “raw mode” in BSD. This uses
- noncanonical input, and turns off most processing to give an
- unmodified channel to the terminal.
- It does exactly this:
- TERMIOS-P->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
- |INLCR|IGNCR|ICRNL|IXON);
- TERMIOS-P->c_oflag &= ~OPOST;
- TERMIOS-P->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
- TERMIOS-P->c_cflag &= ~(CSIZE|PARENB);
- TERMIOS-P->c_cflag |= CS8;
- File: libc.info, Node: BSD Terminal Modes, Next: Line Control, Prev: Terminal Modes, Up: Low-Level Terminal Interface
- 17.5 BSD Terminal Modes
- =======================
- The usual way to get and set terminal modes is with the functions
- described in *note Terminal Modes::. However, on some systems you can
- use the BSD-derived functions in this section to do some of the same
- things. On many systems, these functions do not exist. Even with the
- GNU C Library, the functions simply fail with ‘errno’ = ‘ENOSYS’ with
- many kernels, including Linux.
- The symbols used in this section are declared in ‘sgtty.h’.
- -- Data Type: struct sgttyb
- This structure is an input or output parameter list for ‘gtty’ and
- ‘stty’.
- ‘char sg_ispeed’
- Line speed for input
- ‘char sg_ospeed’
- Line speed for output
- ‘char sg_erase’
- Erase character
- ‘char sg_kill’
- Kill character
- ‘int sg_flags’
- Various flags
- -- Function: int gtty (int FILEDES, struct sgttyb *ATTRIBUTES)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function gets the attributes of a terminal.
- ‘gtty’ sets *ATTRIBUTES to describe the terminal attributes of the
- terminal which is open with file descriptor FILEDES.
- -- Function: int stty (int FILEDES, const struct sgttyb *ATTRIBUTES)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function sets the attributes of a terminal.
- ‘stty’ sets the terminal attributes of the terminal which is open
- with file descriptor FILEDES to those described by *ATTRIBUTES.
- File: libc.info, Node: Line Control, Next: Noncanon Example, Prev: BSD Terminal Modes, Up: Low-Level Terminal Interface
- 17.6 Line Control Functions
- ===========================
- These functions perform miscellaneous control actions on terminal
- devices. As regards terminal access, they are treated like doing
- output: if any of these functions is used by a background process on its
- controlling terminal, normally all processes in the process group are
- sent a ‘SIGTTOU’ signal. The exception is if the calling process itself
- is ignoring or blocking ‘SIGTTOU’ signals, in which case the operation
- is performed and no signal is sent. *Note Job Control::.
- -- Function: int tcsendbreak (int FILEDES, int DURATION)
- Preliminary: | MT-Unsafe race:tcattr(filedes)/bsd | AS-Unsafe |
- AC-Unsafe corrupt/bsd | *Note POSIX Safety Concepts::.
- This function generates a break condition by transmitting a stream
- of zero bits on the terminal associated with the file descriptor
- FILEDES. The duration of the break is controlled by the DURATION
- argument. If zero, the duration is between 0.25 and 0.5 seconds.
- The meaning of a nonzero value depends on the operating system.
- This function does nothing if the terminal is not an asynchronous
- serial data port.
- The return value is normally zero. In the event of an error, a
- value of -1 is returned. The following ‘errno’ error conditions
- are defined for this function:
- ‘EBADF’
- The FILEDES is not a valid file descriptor.
- ‘ENOTTY’
- The FILEDES is not associated with a terminal device.
- -- Function: int tcdrain (int FILEDES)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- The ‘tcdrain’ function waits until all queued output to the
- terminal FILEDES has been transmitted.
- 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
- ‘tcdrain’ is called. If the thread gets canceled these resources
- stay allocated until the program ends. To avoid this calls to
- ‘tcdrain’ should be protected using cancellation handlers.
- The return value is normally zero. In the event of an error, a
- value of -1 is returned. The following ‘errno’ error conditions
- are defined for this function:
- ‘EBADF’
- The FILEDES is not a valid file descriptor.
- ‘ENOTTY’
- The FILEDES is not associated with a terminal device.
- ‘EINTR’
- The operation was interrupted by delivery of a signal. *Note
- Interrupted Primitives::.
- -- Function: int tcflush (int FILEDES, int QUEUE)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- The ‘tcflush’ function is used to clear the input and/or output
- queues associated with the terminal file FILEDES. The QUEUE
- argument specifies which queue(s) to clear, and can be one of the
- following values:
- ‘TCIFLUSH’
- Clear any input data received, but not yet read.
- ‘TCOFLUSH’
- Clear any output data written, but not yet transmitted.
- ‘TCIOFLUSH’
- Clear both queued input and output.
- The return value is normally zero. In the event of an error, a
- value of -1 is returned. The following ‘errno’ error conditions
- are defined for this function:
- ‘EBADF’
- The FILEDES is not a valid file descriptor.
- ‘ENOTTY’
- The FILEDES is not associated with a terminal device.
- ‘EINVAL’
- A bad value was supplied as the QUEUE argument.
- It is unfortunate that this function is named ‘tcflush’, because
- the term “flush” is normally used for quite another
- operation—waiting until all output is transmitted—and using it for
- discarding input or output would be confusing. Unfortunately, the
- name ‘tcflush’ comes from POSIX and we cannot change it.
- -- Function: int tcflow (int FILEDES, int ACTION)
- Preliminary: | MT-Unsafe race:tcattr(filedes)/bsd | AS-Unsafe |
- AC-Safe | *Note POSIX Safety Concepts::.
- The ‘tcflow’ function is used to perform operations relating to
- XON/XOFF flow control on the terminal file specified by FILEDES.
- The ACTION argument specifies what operation to perform, and can be
- one of the following values:
- ‘TCOOFF’
- Suspend transmission of output.
- ‘TCOON’
- Restart transmission of output.
- ‘TCIOFF’
- Transmit a STOP character.
- ‘TCION’
- Transmit a START character.
- For more information about the STOP and START characters, see *note
- Special Characters::.
- The return value is normally zero. In the event of an error, a
- value of -1 is returned. The following ‘errno’ error conditions
- are defined for this function:
- ‘EBADF’
- The FILEDES is not a valid file descriptor.
- ‘ENOTTY’
- The FILEDES is not associated with a terminal device.
- ‘EINVAL’
- A bad value was supplied as the ACTION argument.
- File: libc.info, Node: Noncanon Example, Next: Pseudo-Terminals, Prev: Line Control, Up: Low-Level Terminal Interface
- 17.7 Noncanonical Mode Example
- ==============================
- Here is an example program that shows how you can set up a terminal
- device to read single characters in noncanonical input mode, without
- echo.
- #include <unistd.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <termios.h>
- /* Use this variable to remember original terminal attributes. */
- struct termios saved_attributes;
- void
- reset_input_mode (void)
- {
- tcsetattr (STDIN_FILENO, TCSANOW, &saved_attributes);
- }
- void
- set_input_mode (void)
- {
- struct termios tattr;
- char *name;
- /* Make sure stdin is a terminal. */
- if (!isatty (STDIN_FILENO))
- {
- fprintf (stderr, "Not a terminal.\n");
- exit (EXIT_FAILURE);
- }
- /* Save the terminal attributes so we can restore them later. */
- tcgetattr (STDIN_FILENO, &saved_attributes);
- atexit (reset_input_mode);
- /* Set the funny terminal modes. */
- tcgetattr (STDIN_FILENO, &tattr);
- tattr.c_lflag &= ~(ICANON|ECHO); /* Clear ICANON and ECHO. */
- tattr.c_cc[VMIN] = 1;
- tattr.c_cc[VTIME] = 0;
- tcsetattr (STDIN_FILENO, TCSAFLUSH, &tattr);
- }
- int
- main (void)
- {
- char c;
- set_input_mode ();
- while (1)
- {
- read (STDIN_FILENO, &c, 1);
- if (c == '\004') /* ‘C-d’ */
- break;
- else
- putchar (c);
- }
- return EXIT_SUCCESS;
- }
- This program is careful to restore the original terminal modes before
- exiting or terminating with a signal. It uses the ‘atexit’ function
- (*note Cleanups on Exit::) to make sure this is done by ‘exit’.
- The shell is supposed to take care of resetting the terminal modes
- when a process is stopped or continued; see *note Job Control::. But
- some existing shells do not actually do this, so you may wish to
- establish handlers for job control signals that reset terminal modes.
- The above example does so.
- File: libc.info, Node: Pseudo-Terminals, Prev: Noncanon Example, Up: Low-Level Terminal Interface
- 17.8 Pseudo-Terminals
- =====================
- A "pseudo-terminal" is a special interprocess communication channel that
- acts like a terminal. One end of the channel is called the "master"
- side or "master pseudo-terminal device", the other side is called the
- "slave" side. Data written to the master side is received by the slave
- side as if it was the result of a user typing at an ordinary terminal,
- and data written to the slave side is sent to the master side as if it
- was written on an ordinary terminal.
- Pseudo terminals are the way programs like ‘xterm’ and ‘emacs’
- implement their terminal emulation functionality.
- * Menu:
- * Allocation:: Allocating a pseudo terminal.
- * Pseudo-Terminal Pairs:: How to open both sides of a
- pseudo-terminal in a single operation.
- File: libc.info, Node: Allocation, Next: Pseudo-Terminal Pairs, Up: Pseudo-Terminals
- 17.8.1 Allocating Pseudo-Terminals
- ----------------------------------
- This subsection describes functions for allocating a pseudo-terminal,
- and for making this pseudo-terminal available for actual use. These
- functions are declared in the header file ‘stdlib.h’.
- -- Function: int getpt (void)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe fd | *Note POSIX Safety
- Concepts::.
- The ‘getpt’ function returns a new file descriptor for the next
- available master pseudo-terminal. The normal return value from
- ‘getpt’ is a non-negative integer file descriptor. In the case of
- an error, a value of -1 is returned instead. The following ‘errno’
- conditions are defined for this function:
- ‘ENOENT’
- There are no free master pseudo-terminals available.
- This function is a GNU extension.
- -- Function: int grantpt (int FILEDES)
- Preliminary: | MT-Safe locale | AS-Unsafe dlopen plugin heap lock |
- AC-Unsafe corrupt lock fd mem | *Note POSIX Safety Concepts::.
- The ‘grantpt’ function changes the ownership and access permission
- of the slave pseudo-terminal device corresponding to the master
- pseudo-terminal device associated with the file descriptor FILEDES.
- The owner is set from the real user ID of the calling process
- (*note Process Persona::), and the group is set to a special group
- (typically "tty") or from the real group ID of the calling process.
- The access permission is set such that the file is both readable
- and writable by the owner and only writable by the group.
- On some systems this function is implemented by invoking a special
- ‘setuid’ root program (*note How Change Persona::). As a
- consequence, installing a signal handler for the ‘SIGCHLD’ signal
- (*note Job Control Signals::) may interfere with a call to
- ‘grantpt’.
- The normal return value from ‘grantpt’ 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.
- ‘EINVAL’
- The FILEDES argument is not associated with a master
- pseudo-terminal device.
- ‘EACCES’
- The slave pseudo-terminal device corresponding to the master
- associated with FILEDES could not be accessed.
- -- Function: int unlockpt (int FILEDES)
- Preliminary: | MT-Safe | AS-Unsafe heap/bsd | AC-Unsafe mem fd |
- *Note POSIX Safety Concepts::.
- The ‘unlockpt’ function unlocks the slave pseudo-terminal device
- corresponding to the master pseudo-terminal device associated with
- the file descriptor FILEDES. On many systems, the slave can only
- be opened after unlocking, so portable applications should always
- call ‘unlockpt’ before trying to open the slave.
- The normal return value from ‘unlockpt’ 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.
- ‘EINVAL’
- The FILEDES argument is not associated with a master
- pseudo-terminal device.
- -- Function: char * ptsname (int FILEDES)
- Preliminary: | MT-Unsafe race:ptsname | AS-Unsafe heap/bsd |
- AC-Unsafe mem fd | *Note POSIX Safety Concepts::.
- If the file descriptor FILEDES is associated with a master
- pseudo-terminal device, the ‘ptsname’ function returns a pointer to
- a statically-allocated, null-terminated string containing the file
- name of the associated slave pseudo-terminal file. This string
- might be overwritten by subsequent calls to ‘ptsname’.
- -- Function: int ptsname_r (int FILEDES, char *BUF, size_t LEN)
- Preliminary: | MT-Safe | AS-Unsafe heap/bsd | AC-Unsafe mem fd |
- *Note POSIX Safety Concepts::.
- The ‘ptsname_r’ function is similar to the ‘ptsname’ function
- except that it places its result into the user-specified buffer
- starting at BUF with length LEN.
- This function is a GNU extension.
- *Portability Note:* On System V derived systems, the file returned by
- the ‘ptsname’ and ‘ptsname_r’ functions may be STREAMS-based, and
- therefore require additional processing after opening before it actually
- behaves as a pseudo terminal.
- Typical usage of these functions is illustrated by the following
- example:
- int
- open_pty_pair (int *amaster, int *aslave)
- {
- int master, slave;
- char *name;
- master = getpt ();
- if (master < 0)
- return 0;
- if (grantpt (master) < 0 || unlockpt (master) < 0)
- goto close_master;
- name = ptsname (master);
- if (name == NULL)
- goto close_master;
- slave = open (name, O_RDWR);
- if (slave == -1)
- goto close_master;
- if (isastream (slave))
- {
- if (ioctl (slave, I_PUSH, "ptem") < 0
- || ioctl (slave, I_PUSH, "ldterm") < 0)
- goto close_slave;
- }
- *amaster = master;
- *aslave = slave;
- return 1;
- close_slave:
- close (slave);
- close_master:
- close (master);
- return 0;
- }
- File: libc.info, Node: Pseudo-Terminal Pairs, Prev: Allocation, Up: Pseudo-Terminals
- 17.8.2 Opening a Pseudo-Terminal Pair
- -------------------------------------
- These functions, derived from BSD, are available in the separate
- ‘libutil’ library, and declared in ‘pty.h’.
- -- Function: int openpty (int *AMASTER, int *ASLAVE, char *NAME, const
- struct termios *TERMP, const struct winsize *WINP)
- Preliminary: | MT-Safe locale | AS-Unsafe dlopen plugin heap lock |
- AC-Unsafe corrupt lock fd mem | *Note POSIX Safety Concepts::.
- This function allocates and opens a pseudo-terminal pair, returning
- the file descriptor for the master in *AMASTER, and the file
- descriptor for the slave in *ASLAVE. If the argument NAME is not a
- null pointer, the file name of the slave pseudo-terminal device is
- stored in ‘*name’. If TERMP is not a null pointer, the terminal
- attributes of the slave are set to the ones specified in the
- structure that TERMP points to (*note Terminal Modes::). Likewise,
- if WINP is not a null pointer, the screen size of the slave is set
- to the values specified in the structure that WINP points to.
- The normal return value from ‘openpty’ is 0; a value of -1 is
- returned in case of failure. The following ‘errno’ conditions are
- defined for this function:
- ‘ENOENT’
- There are no free pseudo-terminal pairs available.
- *Warning:* Using the ‘openpty’ function with NAME not set to ‘NULL’
- is *very dangerous* because it provides no protection against
- overflowing the string NAME. You should use the ‘ttyname’ function
- on the file descriptor returned in *SLAVE to find out the file name
- of the slave pseudo-terminal device instead.
- -- Function: int forkpty (int *AMASTER, char *NAME, const struct
- termios *TERMP, const struct winsize *WINP)
- Preliminary: | MT-Safe locale | AS-Unsafe dlopen plugin heap lock |
- AC-Unsafe corrupt lock fd mem | *Note POSIX Safety Concepts::.
- This function is similar to the ‘openpty’ function, but in
- addition, forks a new process (*note Creating a Process::) and
- makes the newly opened slave pseudo-terminal device the controlling
- terminal (*note Controlling Terminal::) for the child process.
- If the operation is successful, there are then both parent and
- child processes and both see ‘forkpty’ return, but with different
- values: it returns a value of 0 in the child process and returns
- the child’s process ID in the parent process.
- If the allocation of a pseudo-terminal pair or the process creation
- failed, ‘forkpty’ returns a value of -1 in the parent process.
- *Warning:* The ‘forkpty’ function has the same problems with
- respect to the NAME argument as ‘openpty’.
- File: libc.info, Node: Syslog, Next: Mathematics, Prev: Low-Level Terminal Interface, Up: Top
- 18 Syslog
- *********
- This chapter describes facilities for issuing and logging messages of
- system administration interest. This chapter has nothing to do with
- programs issuing messages to their own users or keeping private logs
- (One would typically do that with the facilities described in *note I/O
- on Streams::).
- Most systems have a facility called “Syslog” that allows programs to
- submit messages of interest to system administrators and can be
- configured to pass these messages on in various ways, such as printing
- on the console, mailing to a particular person, or recording in a log
- file for future reference.
- A program uses the facilities in this chapter to submit such
- messages.
- * Menu:
- * Overview of Syslog:: Overview of a system’s Syslog facility
- * Submitting Syslog Messages:: Functions to submit messages to Syslog
- File: libc.info, Node: Overview of Syslog, Next: Submitting Syslog Messages, Up: Syslog
- 18.1 Overview of Syslog
- =======================
- System administrators have to deal with lots of different kinds of
- messages from a plethora of subsystems within each system, and usually
- lots of systems as well. For example, an FTP server might report every
- connection it gets. The kernel might report hardware failures on a disk
- drive. A DNS server might report usage statistics at regular intervals.
- Some of these messages need to be brought to a system administrator’s
- attention immediately. And it may not be just any system administrator
- – there may be a particular system administrator who deals with a
- particular kind of message. Other messages just need to be recorded for
- future reference if there is a problem. Still others may need to have
- information extracted from them by an automated process that generates
- monthly reports.
- To deal with these messages, most Unix systems have a facility called
- "Syslog." It is generally based on a daemon called “Syslogd” Syslogd
- listens for messages on a Unix domain socket named ‘/dev/log’. Based on
- classification information in the messages and its configuration file
- (usually ‘/etc/syslog.conf’), Syslogd routes them in various ways. Some
- of the popular routings are:
- • Write to the system console
- • Mail to a specific user
- • Write to a log file
- • Pass to another daemon
- • Discard
- Syslogd can also handle messages from other systems. It listens on
- the ‘syslog’ UDP port as well as the local socket for messages.
- Syslog can handle messages from the kernel itself. But the kernel
- doesn’t write to ‘/dev/log’; rather, another daemon (sometimes called
- “Klogd”) extracts messages from the kernel and passes them on to Syslog
- as any other process would (and it properly identifies them as messages
- from the kernel).
- Syslog can even handle messages that the kernel issued before Syslogd
- or Klogd was running. A Linux kernel, for example, stores startup
- messages in a kernel message ring and they are normally still there when
- Klogd later starts up. Assuming Syslogd is running by the time Klogd
- starts, Klogd then passes everything in the message ring to it.
- In order to classify messages for disposition, Syslog requires any
- process that submits a message to it to provide two pieces of
- classification information with it:
- facility
- This identifies who submitted the message. There are a small
- number of facilities defined. The kernel, the mail subsystem, and
- an FTP server are examples of recognized facilities. For the
- complete list, *Note syslog; vsyslog::. Keep in mind that these
- are essentially arbitrary classifications. "Mail subsystem"
- doesn’t have any more meaning than the system administrator gives
- to it.
- priority
- This tells how important the content of the message is. Examples
- of defined priority values are: debug, informational, warning and
- critical. For the complete list, see *note syslog; vsyslog::.
- Except for the fact that the priorities have a defined order, the
- meaning of each of these priorities is entirely determined by the
- system administrator.
- A “facility/priority” is a number that indicates both the facility
- and the priority.
- *Warning:* This terminology is not universal. Some people use
- “level” to refer to the priority and “priority” to refer to the
- combination of facility and priority. A Linux kernel has a concept of a
- message “level,” which corresponds both to a Syslog priority and to a
- Syslog facility/priority (It can be both because the facility code for
- the kernel is zero, and that makes priority and facility/priority the
- same value).
- The GNU C Library provides functions to submit messages to Syslog.
- They do it by writing to the ‘/dev/log’ socket. *Note Submitting Syslog
- Messages::.
- The GNU C Library functions only work to submit messages to the
- Syslog facility on the same system. To submit a message to the Syslog
- facility on another system, use the socket I/O functions to write a UDP
- datagram to the ‘syslog’ UDP port on that system. *Note Sockets::.
- File: libc.info, Node: Submitting Syslog Messages, Prev: Overview of Syslog, Up: Syslog
- 18.2 Submitting Syslog Messages
- ===============================
- The GNU C Library provides functions to submit messages to the Syslog
- facility:
- * Menu:
- * openlog:: Open connection to Syslog
- * syslog; vsyslog:: Submit message to Syslog
- * closelog:: Close connection to Syslog
- * setlogmask:: Cause certain messages to be ignored
- * Syslog Example:: Example of all of the above
- These functions only work to submit messages to the Syslog facility
- on the same system. To submit a message to the Syslog facility on
- another system, use the socket I/O functions to write a UDP datagram to
- the ‘syslog’ UDP port on that system. *Note Sockets::.
- File: libc.info, Node: openlog, Next: syslog; vsyslog, Up: Submitting Syslog Messages
- 18.2.1 openlog
- --------------
- The symbols referred to in this section are declared in the file
- ‘syslog.h’.
- -- Function: void openlog (const char *IDENT, int OPTION, int FACILITY)
- Preliminary: | MT-Safe | AS-Unsafe lock | AC-Unsafe lock fd | *Note
- POSIX Safety Concepts::.
- ‘openlog’ opens or reopens a connection to Syslog in preparation
- for submitting messages.
- IDENT is an arbitrary identification string which future ‘syslog’
- invocations will prefix to each message. This is intended to
- identify the source of the message, and people conventionally set
- it to the name of the program that will submit the messages.
- If IDENT is NULL, or if ‘openlog’ is not called, the default
- identification string used in Syslog messages will be the program
- name, taken from argv[0].
- Please note that the string pointer IDENT will be retained
- internally by the Syslog routines. You must not free the memory
- that IDENT points to. It is also dangerous to pass a reference to
- an automatic variable since leaving the scope would mean ending the
- lifetime of the variable. If you want to change the IDENT string,
- you must call ‘openlog’ again; overwriting the string pointed to by
- IDENT is not thread-safe.
- You can cause the Syslog routines to drop the reference to IDENT
- and go back to the default string (the program name taken from
- argv[0]), by calling ‘closelog’: *Note closelog::.
- In particular, if you are writing code for a shared library that
- might get loaded and then unloaded (e.g. a PAM module), and you
- use ‘openlog’, you must call ‘closelog’ before any point where your
- library might get unloaded, as in this example:
- #include <syslog.h>
- void
- shared_library_function (void)
- {
- openlog ("mylibrary", option, priority);
- syslog (LOG_INFO, "shared library has been invoked");
- closelog ();
- }
- Without the call to ‘closelog’, future invocations of ‘syslog’ by
- the program using the shared library may crash, if the library gets
- unloaded and the memory containing the string ‘"mylibrary"’ becomes
- unmapped. This is a limitation of the BSD syslog interface.
- ‘openlog’ may or may not open the ‘/dev/log’ socket, depending on
- OPTION. If it does, it tries to open it and connect it as a stream
- socket. If that doesn’t work, it tries to open it and connect it
- as a datagram socket. The socket has the “Close on Exec”
- attribute, so the kernel will close it if the process performs an
- exec.
- You don’t have to use ‘openlog’. If you call ‘syslog’ without
- having called ‘openlog’, ‘syslog’ just opens the connection
- implicitly and uses defaults for the information in IDENT and
- OPTIONS.
- OPTIONS is a bit string, with the bits as defined by the following
- single bit masks:
- ‘LOG_PERROR’
- If on, ‘openlog’ sets up the connection so that any ‘syslog’
- on this connection writes its message to the calling process’
- Standard Error stream in addition to submitting it to Syslog.
- If off, ‘syslog’ does not write the message to Standard Error.
- ‘LOG_CONS’
- If on, ‘openlog’ sets up the connection so that a ‘syslog’ on
- this connection that fails to submit a message to Syslog
- writes the message instead to system console. If off,
- ‘syslog’ does not write to the system console (but of course
- Syslog may write messages it receives to the console).
- ‘LOG_PID’
- When on, ‘openlog’ sets up the connection so that a ‘syslog’
- on this connection inserts the calling process’ Process ID
- (PID) into the message. When off, ‘openlog’ does not insert
- the PID.
- ‘LOG_NDELAY’
- When on, ‘openlog’ opens and connects the ‘/dev/log’ socket.
- When off, a future ‘syslog’ call must open and connect the
- socket.
- *Portability note:* In early systems, the sense of this bit
- was exactly the opposite.
- ‘LOG_ODELAY’
- This bit does nothing. It exists for backward compatibility.
- If any other bit in OPTIONS is on, the result is undefined.
- FACILITY is the default facility code for this connection. A
- ‘syslog’ on this connection that specifies default facility causes
- this facility to be associated with the message. See ‘syslog’ for
- possible values. A value of zero means the default, which is
- ‘LOG_USER’.
- If a Syslog connection is already open when you call ‘openlog’,
- ‘openlog’ “reopens” the connection. Reopening is like opening
- except that if you specify zero for the default facility code, the
- default facility code simply remains unchanged and if you specify
- LOG_NDELAY and the socket is already open and connected, ‘openlog’
- just leaves it that way.
- File: libc.info, Node: syslog; vsyslog, Next: closelog, Prev: openlog, Up: Submitting Syslog Messages
- 18.2.2 syslog, vsyslog
- ----------------------
- The symbols referred to in this section are declared in the file
- ‘syslog.h’.
- -- Function: void syslog (int FACILITY_PRIORITY, const char *FORMAT, …)
- Preliminary: | MT-Safe env locale | AS-Unsafe corrupt heap lock
- dlopen | AC-Unsafe corrupt lock mem fd | *Note POSIX Safety
- Concepts::.
- ‘syslog’ submits a message to the Syslog facility. It does this by
- writing to the Unix domain socket ‘/dev/log’.
- ‘syslog’ submits the message with the facility and priority
- indicated by FACILITY_PRIORITY. The macro ‘LOG_MAKEPRI’ generates
- a facility/priority from a facility and a priority, as in the
- following example:
- LOG_MAKEPRI(LOG_USER, LOG_WARNING)
- The possible values for the facility code are (macros):
- ‘LOG_USER’
- A miscellaneous user process
- ‘LOG_MAIL’
- Mail
- ‘LOG_DAEMON’
- A miscellaneous system daemon
- ‘LOG_AUTH’
- Security (authorization)
- ‘LOG_SYSLOG’
- Syslog
- ‘LOG_LPR’
- Central printer
- ‘LOG_NEWS’
- Network news (e.g. Usenet)
- ‘LOG_UUCP’
- UUCP
- ‘LOG_CRON’
- Cron and At
- ‘LOG_AUTHPRIV’
- Private security (authorization)
- ‘LOG_FTP’
- Ftp server
- ‘LOG_LOCAL0’
- Locally defined
- ‘LOG_LOCAL1’
- Locally defined
- ‘LOG_LOCAL2’
- Locally defined
- ‘LOG_LOCAL3’
- Locally defined
- ‘LOG_LOCAL4’
- Locally defined
- ‘LOG_LOCAL5’
- Locally defined
- ‘LOG_LOCAL6’
- Locally defined
- ‘LOG_LOCAL7’
- Locally defined
- Results are undefined if the facility code is anything else.
- *NB:* ‘syslog’ recognizes one other facility code: that of the
- kernel. But you can’t specify that facility code with these
- functions. If you try, it looks the same to ‘syslog’ as if you are
- requesting the default facility. But you wouldn’t want to anyway,
- because any program that uses the GNU C Library is not the kernel.
- You can use just a priority code as FACILITY_PRIORITY. In that
- case, ‘syslog’ assumes the default facility established when the
- Syslog connection was opened. *Note Syslog Example::.
- The possible values for the priority code are (macros):
- ‘LOG_EMERG’
- The message says the system is unusable.
- ‘LOG_ALERT’
- Action on the message must be taken immediately.
- ‘LOG_CRIT’
- The message states a critical condition.
- ‘LOG_ERR’
- The message describes an error.
- ‘LOG_WARNING’
- The message is a warning.
- ‘LOG_NOTICE’
- The message describes a normal but important event.
- ‘LOG_INFO’
- The message is purely informational.
- ‘LOG_DEBUG’
- The message is only for debugging purposes.
- Results are undefined if the priority code is anything else.
- If the process does not presently have a Syslog connection open
- (i.e., it did not call ‘openlog’), ‘syslog’ implicitly opens the
- connection the same as ‘openlog’ would, with the following defaults
- for information that would otherwise be included in an ‘openlog’
- call: The default identification string is the program name. The
- default default facility is ‘LOG_USER’. The default for all the
- connection options in OPTIONS is as if those bits were off.
- ‘syslog’ leaves the Syslog connection open.
- If the ‘/dev/log’ socket is not open and connected, ‘syslog’ opens
- and connects it, the same as ‘openlog’ with the ‘LOG_NDELAY’ option
- would.
- ‘syslog’ leaves ‘/dev/log’ open and connected unless its attempt to
- send the message failed, in which case ‘syslog’ closes it (with the
- hope that a future implicit open will restore the Syslog connection
- to a usable state).
- Example:
- #include <syslog.h>
- syslog (LOG_MAKEPRI(LOG_LOCAL1, LOG_ERROR),
- "Unable to make network connection to %s. Error=%m", host);
- -- Function: void vsyslog (int FACILITY_PRIORITY, const char *FORMAT,
- va_list ARGLIST)
- Preliminary: | MT-Safe env locale | AS-Unsafe corrupt heap lock
- dlopen | AC-Unsafe corrupt lock mem fd | *Note POSIX Safety
- Concepts::.
- This is functionally identical to ‘syslog’, with the BSD style
- variable length argument.
- File: libc.info, Node: closelog, Next: setlogmask, Prev: syslog; vsyslog, Up: Submitting Syslog Messages
- 18.2.3 closelog
- ---------------
- The symbols referred to in this section are declared in the file
- ‘syslog.h’.
- -- Function: void closelog (void)
- Preliminary: | MT-Safe | AS-Unsafe lock | AC-Unsafe lock fd | *Note
- POSIX Safety Concepts::.
- ‘closelog’ closes the current Syslog connection, if there is one.
- This includes closing the ‘/dev/log’ socket, if it is open.
- ‘closelog’ also sets the identification string for Syslog messages
- back to the default, if ‘openlog’ was called with a non-NULL
- argument to IDENT. The default identification string is the
- program name taken from argv[0].
- If you are writing shared library code that uses ‘openlog’ to
- generate custom syslog output, you should use ‘closelog’ to drop
- the GNU C Library’s internal reference to the IDENT pointer when
- you are done. Please read the section on ‘openlog’ for more
- information: *Note openlog::.
- ‘closelog’ does not flush any buffers. You do not have to call
- ‘closelog’ before re-opening a Syslog connection with ‘openlog’.
- Syslog connections are automatically closed on exec or exit.
- File: libc.info, Node: setlogmask, Next: Syslog Example, Prev: closelog, Up: Submitting Syslog Messages
- 18.2.4 setlogmask
- -----------------
- The symbols referred to in this section are declared in the file
- ‘syslog.h’.
- -- Function: int setlogmask (int MASK)
- Preliminary: | MT-Unsafe race:LogMask | AS-Unsafe | AC-Safe | *Note
- POSIX Safety Concepts::.
- ‘setlogmask’ sets a mask (the “logmask”) that determines which
- future ‘syslog’ calls shall be ignored. If a program has not
- called ‘setlogmask’, ‘syslog’ doesn’t ignore any calls. You can
- use ‘setlogmask’ to specify that messages of particular priorities
- shall be ignored in the future.
- A ‘setlogmask’ call overrides any previous ‘setlogmask’ call.
- Note that the logmask exists entirely independently of opening and
- closing of Syslog connections.
- Setting the logmask has a similar effect to, but is not the same
- as, configuring Syslog. The Syslog configuration may cause Syslog
- to discard certain messages it receives, but the logmask causes
- certain messages never to get submitted to Syslog in the first
- place.
- MASK is a bit string with one bit corresponding to each of the
- possible message priorities. If the bit is on, ‘syslog’ handles
- messages of that priority normally. If it is off, ‘syslog’
- discards messages of that priority. Use the message priority
- macros described in *note syslog; vsyslog:: and the ‘LOG_MASK’ to
- construct an appropriate MASK value, as in this example:
- LOG_MASK(LOG_EMERG) | LOG_MASK(LOG_ERROR)
- or
- ~(LOG_MASK(LOG_INFO))
- There is also a ‘LOG_UPTO’ macro, which generates a mask with the
- bits on for a certain priority and all priorities above it:
- LOG_UPTO(LOG_ERROR)
- The unfortunate naming of the macro is due to the fact that
- internally, higher numbers are used for lower message priorities.
- File: libc.info, Node: Syslog Example, Prev: setlogmask, Up: Submitting Syslog Messages
- 18.2.5 Syslog Example
- ---------------------
- Here is an example of ‘openlog’, ‘syslog’, and ‘closelog’:
- This example sets the logmask so that debug and informational
- messages get discarded without ever reaching Syslog. So the second
- ‘syslog’ in the example does nothing.
- #include <syslog.h>
- setlogmask (LOG_UPTO (LOG_NOTICE));
- openlog ("exampleprog", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
- syslog (LOG_NOTICE, "Program started by User %d", getuid ());
- syslog (LOG_INFO, "A tree falls in a forest");
- closelog ();
- File: libc.info, Node: Mathematics, Next: Arithmetic, Prev: Syslog, Up: Top
- 19 Mathematics
- **************
- This chapter contains information about functions for performing
- mathematical computations, such as trigonometric functions. Most of
- these functions have prototypes declared in the header file ‘math.h’.
- The complex-valued functions are defined in ‘complex.h’.
- All mathematical functions which take a floating-point argument have
- three variants, one each for ‘double’, ‘float’, and ‘long double’
- arguments. The ‘double’ versions are mostly defined in ISO C89. The
- ‘float’ and ‘long double’ versions are from the numeric extensions to C
- included in ISO C99.
- Which of the three versions of a function should be used depends on
- the situation. For most calculations, the ‘float’ functions are the
- fastest. On the other hand, the ‘long double’ functions have the
- highest precision. ‘double’ is somewhere in between. It is usually
- wise to pick the narrowest type that can accommodate your data. Not all
- machines have a distinct ‘long double’ type; it may be the same as
- ‘double’.
- * Menu:
- * Mathematical Constants:: Precise numeric values for often-used
- constants.
- * Trig Functions:: Sine, cosine, tangent, and friends.
- * Inverse Trig Functions:: Arcsine, arccosine, etc.
- * Exponents and Logarithms:: Also pow and sqrt.
- * Hyperbolic Functions:: sinh, cosh, tanh, etc.
- * Special Functions:: Bessel, gamma, erf.
- * Errors in Math Functions:: Known Maximum Errors in Math Functions.
- * Pseudo-Random Numbers:: Functions for generating pseudo-random
- numbers.
- * FP Function Optimizations:: Fast code or small code.
- File: libc.info, Node: Mathematical Constants, Next: Trig Functions, Up: Mathematics
- 19.1 Predefined Mathematical Constants
- ======================================
- The header ‘math.h’ defines several useful mathematical constants. All
- values are defined as preprocessor macros starting with ‘M_’. The
- values provided are:
- ‘M_E’
- The base of natural logarithms.
- ‘M_LOG2E’
- The logarithm to base ‘2’ of ‘M_E’.
- ‘M_LOG10E’
- The logarithm to base ‘10’ of ‘M_E’.
- ‘M_LN2’
- The natural logarithm of ‘2’.
- ‘M_LN10’
- The natural logarithm of ‘10’.
- ‘M_PI’
- Pi, the ratio of a circle’s circumference to its diameter.
- ‘M_PI_2’
- Pi divided by two.
- ‘M_PI_4’
- Pi divided by four.
- ‘M_1_PI’
- The reciprocal of pi (1/pi)
- ‘M_2_PI’
- Two times the reciprocal of pi.
- ‘M_2_SQRTPI’
- Two times the reciprocal of the square root of pi.
- ‘M_SQRT2’
- The square root of two.
- ‘M_SQRT1_2’
- The reciprocal of the square root of two (also the square root of
- 1/2).
- These constants come from the Unix98 standard and were also available
- in 4.4BSD; therefore they are only defined if ‘_XOPEN_SOURCE=500’, or a
- more general feature select macro, is defined. The default set of
- features includes these constants. *Note Feature Test Macros::.
- All values are of type ‘double’. As an extension, the GNU C Library
- also defines these constants with type ‘long double’. The ‘long double’
- macros have a lowercase ‘l’ appended to their names: ‘M_El’, ‘M_PIl’,
- and so forth. These are only available if ‘_GNU_SOURCE’ is defined.
- _Note:_ Some programs use a constant named ‘PI’ which has the same
- value as ‘M_PI’. This constant is not standard; it may have appeared in
- some old AT&T headers, and is mentioned in Stroustrup’s book on C++. It
- infringes on the user’s name space, so the GNU C Library does not define
- it. Fixing programs written to expect it is simple: replace ‘PI’ with
- ‘M_PI’ throughout, or put ‘-DPI=M_PI’ on the compiler command line.
- File: libc.info, Node: Trig Functions, Next: Inverse Trig Functions, Prev: Mathematical Constants, Up: Mathematics
- 19.2 Trigonometric Functions
- ============================
- These are the familiar ‘sin’, ‘cos’, and ‘tan’ functions. The arguments
- to all of these functions are in units of radians; recall that pi
- radians equals 180 degrees.
- The math library normally defines ‘M_PI’ to a ‘double’ approximation
- of pi. If strict ISO and/or POSIX compliance are requested this
- constant is not defined, but you can easily define it yourself:
- #define M_PI 3.14159265358979323846264338327
- You can also compute the value of pi with the expression ‘acos (-1.0)’.
- -- Function: double sin (double X)
- -- Function: float sinf (float X)
- -- Function: long double sinl (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return the sine of X, where X is given in radians.
- The return value is in the range ‘-1’ to ‘1’.
- -- Function: double cos (double X)
- -- Function: float cosf (float X)
- -- Function: long double cosl (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return the cosine of X, where X is given in
- radians. The return value is in the range ‘-1’ to ‘1’.
- -- Function: double tan (double X)
- -- Function: float tanf (float X)
- -- Function: long double tanl (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return the tangent of X, where X is given in
- radians.
- Mathematically, the tangent function has singularities at odd
- multiples of pi/2. If the argument X is too close to one of these
- singularities, ‘tan’ will signal overflow.
- In many applications where ‘sin’ and ‘cos’ are used, the sine and
- cosine of the same angle are needed at the same time. It is more
- efficient to compute them simultaneously, so the library provides a
- function to do that.
- -- Function: void sincos (double X, double *SINX, double *COSX)
- -- Function: void sincosf (float X, float *SINX, float *COSX)
- -- Function: void sincosl (long double X, long double *SINX, long
- double *COSX)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return the sine of X in ‘*SINX’ and the cosine of X
- in ‘*COSX’, where X is given in radians. Both values, ‘*SINX’ and
- ‘*COSX’, are in the range of ‘-1’ to ‘1’.
- This function is a GNU extension. Portable programs should be
- prepared to cope with its absence.
- ISO C99 defines variants of the trig functions which work on complex
- numbers. The GNU C Library provides these functions, but they are only
- useful if your compiler supports the new complex types defined by the
- standard. (As of this writing GCC supports complex numbers, but there
- are bugs in the implementation.)
- -- Function: complex double csin (complex double Z)
- -- Function: complex float csinf (complex float Z)
- -- Function: complex long double csinl (complex long double Z)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return the complex sine of Z. The mathematical
- definition of the complex sine is
- sin (z) = 1/(2*i) * (exp (z*i) - exp (-z*i)).
- -- Function: complex double ccos (complex double Z)
- -- Function: complex float ccosf (complex float Z)
- -- Function: complex long double ccosl (complex long double Z)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return the complex cosine of Z. The mathematical
- definition of the complex cosine is
- cos (z) = 1/2 * (exp (z*i) + exp (-z*i))
- -- Function: complex double ctan (complex double Z)
- -- Function: complex float ctanf (complex float Z)
- -- Function: complex long double ctanl (complex long double Z)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return the complex tangent of Z. The mathematical
- definition of the complex tangent is
- tan (z) = -i * (exp (z*i) - exp (-z*i)) / (exp (z*i) + exp (-z*i))
- The complex tangent has poles at pi/2 + 2n, where n is an integer.
- ‘ctan’ may signal overflow if Z is too close to a pole.
- File: libc.info, Node: Inverse Trig Functions, Next: Exponents and Logarithms, Prev: Trig Functions, Up: Mathematics
- 19.3 Inverse Trigonometric Functions
- ====================================
- These are the usual arcsine, arccosine and arctangent functions, which
- are the inverses of the sine, cosine and tangent functions respectively.
- -- Function: double asin (double X)
- -- Function: float asinf (float X)
- -- Function: long double asinl (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions compute the arcsine of X—that is, the value whose
- sine is X. The value is in units of radians. Mathematically,
- there are infinitely many such values; the one actually returned is
- the one between ‘-pi/2’ and ‘pi/2’ (inclusive).
- The arcsine function is defined mathematically only over the domain
- ‘-1’ to ‘1’. If X is outside the domain, ‘asin’ signals a domain
- error.
- -- Function: double acos (double X)
- -- Function: float acosf (float X)
- -- Function: long double acosl (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions compute the arccosine of X—that is, the value whose
- cosine is X. The value is in units of radians. Mathematically,
- there are infinitely many such values; the one actually returned is
- the one between ‘0’ and ‘pi’ (inclusive).
- The arccosine function is defined mathematically only over the
- domain ‘-1’ to ‘1’. If X is outside the domain, ‘acos’ signals a
- domain error.
- -- Function: double atan (double X)
- -- Function: float atanf (float X)
- -- Function: long double atanl (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions compute the arctangent of X—that is, the value
- whose tangent is X. The value is in units of radians.
- Mathematically, there are infinitely many such values; the one
- actually returned is the one between ‘-pi/2’ and ‘pi/2’
- (inclusive).
- -- Function: double atan2 (double Y, double X)
- -- Function: float atan2f (float Y, float X)
- -- Function: long double atan2l (long double Y, long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- This function computes the arctangent of Y/X, but the signs of both
- arguments are used to determine the quadrant of the result, and X
- is permitted to be zero. The return value is given in radians and
- is in the range ‘-pi’ to ‘pi’, inclusive.
- If X and Y are coordinates of a point in the plane, ‘atan2’ returns
- the signed angle between the line from the origin to that point and
- the x-axis. Thus, ‘atan2’ is useful for converting Cartesian
- coordinates to polar coordinates. (To compute the radial
- coordinate, use ‘hypot’; see *note Exponents and Logarithms::.)
- If both X and Y are zero, ‘atan2’ returns zero.
- ISO C99 defines complex versions of the inverse trig functions.
- -- Function: complex double casin (complex double Z)
- -- Function: complex float casinf (complex float Z)
- -- Function: complex long double casinl (complex long double Z)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions compute the complex arcsine of Z—that is, the value
- whose sine is Z. The value returned is in radians.
- Unlike the real-valued functions, ‘casin’ is defined for all values
- of Z.
- -- Function: complex double cacos (complex double Z)
- -- Function: complex float cacosf (complex float Z)
- -- Function: complex long double cacosl (complex long double Z)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions compute the complex arccosine of Z—that is, the
- value whose cosine is Z. The value returned is in radians.
- Unlike the real-valued functions, ‘cacos’ is defined for all values
- of Z.
- -- Function: complex double catan (complex double Z)
- -- Function: complex float catanf (complex float Z)
- -- Function: complex long double catanl (complex long double Z)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions compute the complex arctangent of Z—that is, the
- value whose tangent is Z. The value is in units of radians.
- File: libc.info, Node: Exponents and Logarithms, Next: Hyperbolic Functions, Prev: Inverse Trig Functions, Up: Mathematics
- 19.4 Exponentiation and Logarithms
- ==================================
- -- Function: double exp (double X)
- -- Function: float expf (float X)
- -- Function: long double expl (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions compute ‘e’ (the base of natural logarithms) raised
- to the power X.
- If the magnitude of the result is too large to be representable,
- ‘exp’ signals overflow.
- -- Function: double exp2 (double X)
- -- Function: float exp2f (float X)
- -- Function: long double exp2l (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions compute ‘2’ raised to the power X. Mathematically,
- ‘exp2 (x)’ is the same as ‘exp (x * log (2))’.
- -- Function: double exp10 (double X)
- -- Function: float exp10f (float X)
- -- Function: long double exp10l (long double X)
- -- Function: double pow10 (double X)
- -- Function: float pow10f (float X)
- -- Function: long double pow10l (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions compute ‘10’ raised to the power X.
- Mathematically, ‘exp10 (x)’ is the same as ‘exp (x * log (10))’.
- The ‘exp10’ functions are from TS 18661-4:2015; the ‘pow10’ names
- are GNU extensions. The name ‘exp10’ is preferred, since it is
- analogous to ‘exp’ and ‘exp2’.
- -- Function: double log (double X)
- -- Function: float logf (float X)
- -- Function: long double logl (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions compute the natural logarithm of X. ‘exp (log
- (X))’ equals X, exactly in mathematics and approximately in C.
- If X is negative, ‘log’ signals a domain error. If X is zero, it
- returns negative infinity; if X is too close to zero, it may signal
- overflow.
- -- Function: double log10 (double X)
- -- Function: float log10f (float X)
- -- Function: long double log10l (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return the base-10 logarithm of X. ‘log10 (X)’
- equals ‘log (X) / log (10)’.
- -- Function: double log2 (double X)
- -- Function: float log2f (float X)
- -- Function: long double log2l (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return the base-2 logarithm of X. ‘log2 (X)’
- equals ‘log (X) / log (2)’.
- -- Function: double logb (double X)
- -- Function: float logbf (float X)
- -- Function: long double logbl (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions extract the exponent of X and return it as a
- floating-point value. If ‘FLT_RADIX’ is two, ‘logb’ is equal to
- ‘floor (log2 (x))’, except it’s probably faster.
- If X is de-normalized, ‘logb’ returns the exponent X would have if
- it were normalized. If X is infinity (positive or negative),
- ‘logb’ returns oo. If X is zero, ‘logb’ returns oo. It does not
- signal.
- -- Function: int ilogb (double X)
- -- Function: int ilogbf (float X)
- -- Function: int ilogbl (long double X)
- -- Function: long int llogb (double X)
- -- Function: long int llogbf (float X)
- -- Function: long int llogbl (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions are equivalent to the corresponding ‘logb’
- functions except that they return signed integer values. The
- ‘ilogb’ functions are from ISO C99; the ‘llogb’ functions are from
- TS 18661-1:2014.
- Since integers cannot represent infinity and NaN, ‘ilogb’ instead
- returns an integer that can’t be the exponent of a normal floating-point
- number. ‘math.h’ defines constants so you can check for this.
- -- Macro: int FP_ILOGB0
- ‘ilogb’ returns this value if its argument is ‘0’. The numeric
- value is either ‘INT_MIN’ or ‘-INT_MAX’.
- This macro is defined in ISO C99.
- -- Macro: long int FP_LLOGB0
- ‘llogb’ returns this value if its argument is ‘0’. The numeric
- value is either ‘LONG_MIN’ or ‘-LONG_MAX’.
- This macro is defined in TS 18661-1:2014.
- -- Macro: int FP_ILOGBNAN
- ‘ilogb’ returns this value if its argument is ‘NaN’. The numeric
- value is either ‘INT_MIN’ or ‘INT_MAX’.
- This macro is defined in ISO C99.
- -- Macro: long int FP_LLOGBNAN
- ‘llogb’ returns this value if its argument is ‘NaN’. The numeric
- value is either ‘LONG_MIN’ or ‘LONG_MAX’.
- This macro is defined in TS 18661-1:2014.
- These values are system specific. They might even be the same. The
- proper way to test the result of ‘ilogb’ is as follows:
- i = ilogb (f);
- if (i == FP_ILOGB0 || i == FP_ILOGBNAN)
- {
- if (isnan (f))
- {
- /* Handle NaN. */
- }
- else if (f == 0.0)
- {
- /* Handle 0.0. */
- }
- else
- {
- /* Some other value with large exponent,
- perhaps +Inf. */
- }
- }
- -- Function: double pow (double BASE, double POWER)
- -- Function: float powf (float BASE, float POWER)
- -- Function: long double powl (long double BASE, long double POWER)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These are general exponentiation functions, returning BASE raised
- to POWER.
- Mathematically, ‘pow’ would return a complex number when BASE is
- negative and POWER is not an integral value. ‘pow’ can’t do that,
- so instead it signals a domain error. ‘pow’ may also underflow or
- overflow the destination type.
- -- Function: double sqrt (double X)
- -- Function: float sqrtf (float X)
- -- Function: long double sqrtl (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return the nonnegative square root of X.
- If X is negative, ‘sqrt’ signals a domain error. Mathematically,
- it should return a complex number.
- -- Function: double cbrt (double X)
- -- Function: float cbrtf (float X)
- -- Function: long double cbrtl (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return the cube root of X. They cannot fail; every
- representable real value has a representable real cube root.
- -- Function: double hypot (double X, double Y)
- -- Function: float hypotf (float X, float Y)
- -- Function: long double hypotl (long double X, long double Y)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return ‘sqrt (X*X + Y*Y)’. This is the length of
- the hypotenuse of a right triangle with sides of length X and Y, or
- the distance of the point (X, Y) from the origin. Using this
- function instead of the direct formula is wise, since the error is
- much smaller. See also the function ‘cabs’ in *note Absolute
- Value::.
- -- Function: double expm1 (double X)
- -- Function: float expm1f (float X)
- -- Function: long double expm1l (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return a value equivalent to ‘exp (X) - 1’. They
- are computed in a way that is accurate even if X is near zero—a
- case where ‘exp (X) - 1’ would be inaccurate owing to subtraction
- of two numbers that are nearly equal.
- -- Function: double log1p (double X)
- -- Function: float log1pf (float X)
- -- Function: long double log1pl (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return a value equivalent to ‘log (1 + X)’. They
- are computed in a way that is accurate even if X is near zero.
- ISO C99 defines complex variants of some of the exponentiation and
- logarithm functions.
- -- Function: complex double cexp (complex double Z)
- -- Function: complex float cexpf (complex float Z)
- -- Function: complex long double cexpl (complex long double Z)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return ‘e’ (the base of natural logarithms) raised
- to the power of Z. Mathematically, this corresponds to the value
- exp (z) = exp (creal (z)) * (cos (cimag (z)) + I * sin (cimag (z)))
- -- Function: complex double clog (complex double Z)
- -- Function: complex float clogf (complex float Z)
- -- Function: complex long double clogl (complex long double Z)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return the natural logarithm of Z. Mathematically,
- this corresponds to the value
- log (z) = log (cabs (z)) + I * carg (z)
- ‘clog’ has a pole at 0, and will signal overflow if Z equals or is
- very close to 0. It is well-defined for all other values of Z.
- -- Function: complex double clog10 (complex double Z)
- -- Function: complex float clog10f (complex float Z)
- -- Function: complex long double clog10l (complex long double Z)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return the base 10 logarithm of the complex value
- Z. Mathematically, this corresponds to the value
- log10 (z) = log10 (cabs (z)) + I * carg (z) / log (10)
- These functions are GNU extensions.
- -- Function: complex double csqrt (complex double Z)
- -- Function: complex float csqrtf (complex float Z)
- -- Function: complex long double csqrtl (complex long double Z)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return the complex square root of the argument Z.
- Unlike the real-valued functions, they are defined for all values
- of Z.
- -- Function: complex double cpow (complex double BASE, complex double
- POWER)
- -- Function: complex float cpowf (complex float BASE, complex float
- POWER)
- -- Function: complex long double cpowl (complex long double BASE,
- complex long double POWER)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return BASE raised to the power of POWER. This is
- equivalent to ‘cexp (y * clog (x))’
- File: libc.info, Node: Hyperbolic Functions, Next: Special Functions, Prev: Exponents and Logarithms, Up: Mathematics
- 19.5 Hyperbolic Functions
- =========================
- The functions in this section are related to the exponential functions;
- see *note Exponents and Logarithms::.
- -- Function: double sinh (double X)
- -- Function: float sinhf (float X)
- -- Function: long double sinhl (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return the hyperbolic sine of X, defined
- mathematically as ‘(exp (X) - exp (-X)) / 2’. They may signal
- overflow if X is too large.
- -- Function: double cosh (double X)
- -- Function: float coshf (float X)
- -- Function: long double coshl (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return the hyperbolic cosine of X, defined
- mathematically as ‘(exp (X) + exp (-X)) / 2’. They may signal
- overflow if X is too large.
- -- Function: double tanh (double X)
- -- Function: float tanhf (float X)
- -- Function: long double tanhl (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return the hyperbolic tangent of X, defined
- mathematically as ‘sinh (X) / cosh (X)’. They may signal overflow
- if X is too large.
- There are counterparts for the hyperbolic functions which take
- complex arguments.
- -- Function: complex double csinh (complex double Z)
- -- Function: complex float csinhf (complex float Z)
- -- Function: complex long double csinhl (complex long double Z)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return the complex hyperbolic sine of Z, defined
- mathematically as ‘(exp (Z) - exp (-Z)) / 2’.
- -- Function: complex double ccosh (complex double Z)
- -- Function: complex float ccoshf (complex float Z)
- -- Function: complex long double ccoshl (complex long double Z)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return the complex hyperbolic cosine of Z, defined
- mathematically as ‘(exp (Z) + exp (-Z)) / 2’.
- -- Function: complex double ctanh (complex double Z)
- -- Function: complex float ctanhf (complex float Z)
- -- Function: complex long double ctanhl (complex long double Z)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return the complex hyperbolic tangent of Z, defined
- mathematically as ‘csinh (Z) / ccosh (Z)’.
- -- Function: double asinh (double X)
- -- Function: float asinhf (float X)
- -- Function: long double asinhl (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return the inverse hyperbolic sine of X—the value
- whose hyperbolic sine is X.
- -- Function: double acosh (double X)
- -- Function: float acoshf (float X)
- -- Function: long double acoshl (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return the inverse hyperbolic cosine of X—the value
- whose hyperbolic cosine is X. If X is less than ‘1’, ‘acosh’
- signals a domain error.
- -- Function: double atanh (double X)
- -- Function: float atanhf (float X)
- -- Function: long double atanhl (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return the inverse hyperbolic tangent of X—the
- value whose hyperbolic tangent is X. If the absolute value of X is
- greater than ‘1’, ‘atanh’ signals a domain error; if it is equal to
- 1, ‘atanh’ returns infinity.
- -- Function: complex double casinh (complex double Z)
- -- Function: complex float casinhf (complex float Z)
- -- Function: complex long double casinhl (complex long double Z)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return the inverse complex hyperbolic sine of Z—the
- value whose complex hyperbolic sine is Z.
- -- Function: complex double cacosh (complex double Z)
- -- Function: complex float cacoshf (complex float Z)
- -- Function: complex long double cacoshl (complex long double Z)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return the inverse complex hyperbolic cosine of
- Z—the value whose complex hyperbolic cosine is Z. Unlike the
- real-valued functions, there are no restrictions on the value of Z.
- -- Function: complex double catanh (complex double Z)
- -- Function: complex float catanhf (complex float Z)
- -- Function: complex long double catanhl (complex long double Z)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- These functions return the inverse complex hyperbolic tangent of
- Z—the value whose complex hyperbolic tangent is Z. Unlike the
- real-valued functions, there are no restrictions on the value of Z.
- File: libc.info, Node: Special Functions, Next: Errors in Math Functions, Prev: Hyperbolic Functions, Up: Mathematics
- 19.6 Special Functions
- ======================
- These are some more exotic mathematical functions which are sometimes
- useful. Currently they only have real-valued versions.
- -- Function: double erf (double X)
- -- Function: float erff (float X)
- -- Function: long double erfl (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- ‘erf’ returns the error function of X. The error function is
- defined as
- erf (x) = 2/sqrt(pi) * integral from 0 to x of exp(-t^2) dt
- -- Function: double erfc (double X)
- -- Function: float erfcf (float X)
- -- Function: long double erfcl (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- ‘erfc’ returns ‘1.0 - erf(X)’, but computed in a fashion that
- avoids round-off error when X is large.
- -- Function: double lgamma (double X)
- -- Function: float lgammaf (float X)
- -- Function: long double lgammal (long double X)
- Preliminary: | MT-Unsafe race:signgam | AS-Unsafe | AC-Safe | *Note
- POSIX Safety Concepts::.
- ‘lgamma’ returns the natural logarithm of the absolute value of the
- gamma function of X. The gamma function is defined as
- gamma (x) = integral from 0 to oo of t^(x-1) e^-t dt
- The sign of the gamma function is stored in the global variable
- SIGNGAM, which is declared in ‘math.h’. It is ‘1’ if the
- intermediate result was positive or zero, or ‘-1’ if it was
- negative.
- To compute the real gamma function you can use the ‘tgamma’
- function or you can compute the values as follows:
- lgam = lgamma(x);
- gam = signgam*exp(lgam);
- The gamma function has singularities at the non-positive integers.
- ‘lgamma’ will raise the zero divide exception if evaluated at a
- singularity.
- -- Function: double lgamma_r (double X, int *SIGNP)
- -- Function: float lgammaf_r (float X, int *SIGNP)
- -- Function: long double lgammal_r (long double X, int *SIGNP)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- ‘lgamma_r’ is just like ‘lgamma’, but it stores the sign of the
- intermediate result in the variable pointed to by SIGNP instead of
- in the SIGNGAM global. This means it is reentrant.
- -- Function: double gamma (double X)
- -- Function: float gammaf (float X)
- -- Function: long double gammal (long double X)
- Preliminary: | MT-Unsafe race:signgam | AS-Unsafe | AC-Safe | *Note
- POSIX Safety Concepts::.
- These functions exist for compatibility reasons. They are
- equivalent to ‘lgamma’ etc. It is better to use ‘lgamma’ since for
- one the name reflects better the actual computation, and moreover
- ‘lgamma’ is standardized in ISO C99 while ‘gamma’ is not.
- -- Function: double tgamma (double X)
- -- Function: float tgammaf (float X)
- -- Function: long double tgammal (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- ‘tgamma’ applies the gamma function to X. The gamma function is
- defined as
- gamma (x) = integral from 0 to oo of t^(x-1) e^-t dt
- This function was introduced in ISO C99.
- -- Function: double j0 (double X)
- -- Function: float j0f (float X)
- -- Function: long double j0l (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- ‘j0’ returns the Bessel function of the first kind of order 0 of X.
- It may signal underflow if X is too large.
- -- Function: double j1 (double X)
- -- Function: float j1f (float X)
- -- Function: long double j1l (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- ‘j1’ returns the Bessel function of the first kind of order 1 of X.
- It may signal underflow if X is too large.
- -- Function: double jn (int N, double X)
- -- Function: float jnf (int N, float X)
- -- Function: long double jnl (int N, long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- ‘jn’ returns the Bessel function of the first kind of order N of X.
- It may signal underflow if X is too large.
- -- Function: double y0 (double X)
- -- Function: float y0f (float X)
- -- Function: long double y0l (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- ‘y0’ returns the Bessel function of the second kind of order 0 of
- X. It may signal underflow if X is too large. If X is negative,
- ‘y0’ signals a domain error; if it is zero, ‘y0’ signals overflow
- and returns -oo.
- -- Function: double y1 (double X)
- -- Function: float y1f (float X)
- -- Function: long double y1l (long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- ‘y1’ returns the Bessel function of the second kind of order 1 of
- X. It may signal underflow if X is too large. If X is negative,
- ‘y1’ signals a domain error; if it is zero, ‘y1’ signals overflow
- and returns -oo.
- -- Function: double yn (int N, double X)
- -- Function: float ynf (int N, float X)
- -- Function: long double ynl (int N, long double X)
- Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
- Concepts::.
- ‘yn’ returns the Bessel function of the second kind of order N of
- X. It may signal underflow if X is too large. If X is negative,
- ‘yn’ signals a domain error; if it is zero, ‘yn’ signals overflow
- and returns -oo.
- File: libc.info, Node: Errors in Math Functions, Next: Pseudo-Random Numbers, Prev: Special Functions, Up: Mathematics
- 19.7 Known Maximum Errors in Math Functions
- ===========================================
- This section lists the known errors of the functions in the math
- library. Errors are measured in “units of the last place”. This is a
- measure for the relative error. For a number z with the representation
- d.d…d*2^e (we assume IEEE floating-point numbers with base 2) the ULP is
- represented by
- |d.d...d - (z / 2^e)| / 2^(p - 1)
- where p is the number of bits in the mantissa of the floating-point
- number representation. Ideally the error for all functions is always
- less than 0.5ulps in round-to-nearest mode. Using rounding bits this is
- also possible and normally implemented for the basic operations. Except
- for certain functions such as ‘sqrt’, ‘fma’ and ‘rint’ whose results are
- fully specified by reference to corresponding IEEE 754 floating-point
- operations, and conversions between strings and floating point, the GNU
- C Library does not aim for correctly rounded results for functions in
- the math library, and does not aim for correctness in whether “inexact”
- exceptions are raised. Instead, the goals for accuracy of functions
- without fully specified results are as follows; some functions have bugs
- meaning they do not meet these goals in all cases. In the future, the
- GNU C Library may provide some other correctly rounding functions under
- the names such as ‘crsin’ proposed for an extension to ISO C.
- • Each function with a floating-point result behaves as if it
- computes an infinite-precision result that is within a few ulp (in
- both real and complex parts, for functions with complex results) of
- the mathematically correct value of the function (interpreted
- together with ISO C or POSIX semantics for the function in
- question) at the exact value passed as the input. Exceptions are
- raised appropriately for this value and in accordance with IEEE 754
- / ISO C / POSIX semantics, and it is then rounded according to the
- current rounding direction to the result that is returned to the
- user. ‘errno’ may also be set (*note Math Error Reporting::).
- (The “inexact” exception may be raised, or not raised, even if this
- is inconsistent with the infinite-precision value.)
- • For the IBM ‘long double’ format, as used on PowerPC GNU/Linux, the
- accuracy goal is weaker for input values not exactly representable
- in 106 bits of precision; it is as if the input value is some value
- within 0.5ulp of the value actually passed, where “ulp” is
- interpreted in terms of a fixed-precision 106-bit mantissa, but not
- necessarily the exact value actually passed with discontiguous
- mantissa bits.
- • For the IBM ‘long double’ format, functions whose results are fully
- specified by reference to corresponding IEEE 754 floating-point
- operations have the same accuracy goals as other functions, but
- with the error bound being the same as that for division (3ulp).
- Furthermore, “inexact” and “underflow” exceptions may be raised for
- all functions for any inputs, even where such exceptions are
- inconsistent with the returned value, since the underlying
- floating-point arithmetic has that property.
- • Functions behave as if the infinite-precision result computed is
- zero, infinity or NaN if and only if that is the mathematically
- correct infinite-precision result. They behave as if the
- infinite-precision result computed always has the same sign as the
- mathematically correct result.
- • If the mathematical result is more than a few ulp above the
- overflow threshold for the current rounding direction, the value
- returned is the appropriate overflow value for the current rounding
- direction, with the overflow exception raised.
- • If the mathematical result has magnitude well below half the least
- subnormal magnitude, the returned value is either zero or the least
- subnormal (in each case, with the correct sign), according to the
- current rounding direction and with the underflow exception raised.
- • Where the mathematical result underflows (before rounding) and is
- not exactly representable as a floating-point value, the function
- does not behave as if the computed infinite-precision result is an
- exact value in the subnormal range. This means that the underflow
- exception is raised other than possibly for cases where the
- mathematical result is very close to the underflow threshold and
- the function behaves as if it computes an infinite-precision result
- that does not underflow. (So there may be spurious underflow
- exceptions in cases where the underflowing result is exact, but not
- missing underflow exceptions in cases where it is inexact.)
- • The GNU C Library does not aim for functions to satisfy other
- properties of the underlying mathematical function, such as
- monotonicity, where not implied by the above goals.
- • All the above applies to both real and complex parts, for complex
- functions.
- Therefore many of the functions in the math library have errors. The
- table lists the maximum error for each function which is exposed by one
- of the existing tests in the test suite. The table tries to cover as
- much as possible and list the actual maximum error (or at least a
- ballpark figure) but this is often not achieved due to the large search
- space.
- The table lists the ULP values for different architectures.
- Different architectures have different results since their hardware
- support for floating-point operations varies and also the existing
- hardware support is different.
- Function AArch64 ARM Alpha ColdFire Generic
- acosf 1 1 1 - -
- acos - - - - -
- acosl 1 - 1 - -
- acoshf 2 2 2 - -
- acosh 2 2 2 - -
- acoshl 2 - 2 - -
- asinf 1 1 1 - -
- asin - - - - -
- asinl 1 - 1 - -
- asinhf 1 1 1 - -
- asinh 1 1 1 - -
- asinhl 3 - 3 - -
- atanf 1 1 1 - -
- atan 1 - - - -
- atanl 1 - 1 - -
- atanhf 2 2 2 1 -
- atanh 2 2 2 - -
- atanhl 3 - 3 - -
- atan2f 1 1 1 1 -
- atan2 - - - - -
- atan2l 1 - 1 - -
- cabsf - - - - -
- cabs 1 1 1 - -
- cabsl 1 - 1 - -
- cacosf 2 + i 2 2 + i 2 2 + i 2 - -
- cacos 1 + i 1 1 + i 1 1 + i 1 - -
- cacosl 2 + i 2 - 2 + i 2 - -
- cacoshf 2 + i 2 2 + i 2 2 + i 2 0 + i 1 -
- cacosh 1 + i 1 1 + i 1 1 + i 1 - -
- cacoshl 2 + i 2 - 2 + i 2 - -
- cargf 1 1 1 - -
- carg 1 - - - -
- cargl 2 - 2 - -
- casinf 1 + i 2 1 + i 2 1 + i 2 1 + i 0 -
- casin 1 + i 1 1 + i 1 1 + i 1 1 + i 0 -
- casinl 2 + i 2 - 2 + i 2 - -
- casinhf 2 + i 1 2 + i 1 2 + i 1 1 + i 6 -
- casinh 1 + i 1 1 + i 1 1 + i 1 5 + i 3 -
- casinhl 2 + i 2 - 2 + i 2 - -
- catanf 1 + i 1 1 + i 1 1 + i 1 0 + i 1 -
- catan 0 + i 1 0 + i 1 0 + i 1 0 + i 1 -
- catanl 1 + i 1 - 1 + i 1 - -
- catanhf 1 + i 1 1 + i 1 1 + i 1 - -
- catanh 1 + i 0 1 + i 0 1 + i 0 4 + i 0 -
- catanhl 1 + i 1 - 1 + i 1 - -
- cbrtf 1 1 1 - -
- cbrt 3 3 3 1 -
- cbrtl 1 - 1 - -
- ccosf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 -
- ccos 1 + i 1 1 + i 1 1 + i 1 1 + i 0 -
- ccosl 1 + i 1 - 1 + i 1 - -
- ccoshf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 -
- ccosh 1 + i 1 1 + i 1 1 + i 1 1 + i 0 -
- ccoshl 1 + i 1 - 1 + i 1 - -
- ceilf - - - - -
- ceil - - - - -
- ceill - - - - -
- cexpf 1 + i 2 1 + i 2 1 + i 2 1 + i 1 -
- cexp 2 + i 1 2 + i 1 2 + i 1 - -
- cexpl 1 + i 1 - 1 + i 1 - -
- cimagf - - - - -
- cimag - - - - -
- cimagl - - - - -
- clogf 3 + i 1 3 + i 1 3 + i 1 1 + i 0 -
- clog 3 + i 1 3 + i 0 3 + i 0 - -
- clogl 2 + i 1 - 2 + i 1 - -
- clog10f 4 + i 2 4 + i 2 4 + i 2 1 + i 1 -
- clog10 3 + i 2 3 + i 2 3 + i 2 0 + i 1 -
- clog10l 2 + i 2 - 2 + i 2 - -
- conjf - - - - -
- conj - - - - -
- conjl - - - - -
- copysignf - - - - -
- copysign - - - - -
- copysignl - - - - -
- cosf 1 1 1 1 -
- cos - - - 2 -
- cosl 1 - 1 - -
- coshf 1 1 1 - -
- cosh 1 1 1 - -
- coshl 1 - 1 - -
- cpowf 5 + i 2 4 + i 2 4 + i 2 4 + i 2 -
- cpow 2 + i 0 2 + i 0 2 + i 0 2 + i 2 -
- cpowl 4 + i 1 - 4 + i 1 - -
- cprojf - - - - -
- cproj - - - - -
- cprojl - - - - -
- crealf - - - - -
- creal - - - - -
- creall - - - - -
- csinf 1 + i 0 1 + i 0 1 + i 0 - -
- csin 1 + i 0 1 + i 0 1 + i 0 - -
- csinl 1 + i 1 - 1 + i 1 - -
- csinhf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 -
- csinh 0 + i 1 0 + i 1 0 + i 1 0 + i 1 -
- csinhl 1 + i 1 - 1 + i 1 - -
- csqrtf 2 + i 2 2 + i 2 2 + i 2 1 + i 0 -
- csqrt 2 + i 2 2 + i 2 2 + i 2 - -
- csqrtl 2 + i 2 - 2 + i 2 - -
- ctanf 1 + i 1 1 + i 1 1 + i 1 - -
- ctan 1 + i 2 1 + i 2 1 + i 2 0 + i 1 -
- ctanl 3 + i 3 - 3 + i 3 - -
- ctanhf 2 + i 1 1 + i 2 1 + i 2 2 + i 1 -
- ctanh 2 + i 2 2 + i 2 2 + i 2 1 + i 0 -
- ctanhl 3 + i 3 - 3 + i 3 - -
- erff 1 1 1 - -
- erf 1 1 1 1 -
- erfl 1 - 1 - -
- erfcf 2 2 2 - -
- erfc 2 3 3 1 -
- erfcl 2 - 2 - -
- expf 1 1 1 - -
- exp - - - - -
- expl 1 - 1 - -
- exp10f - - - 2 -
- exp10 2 2 2 6 -
- exp10l 2 - 2 - -
- exp2f 1 1 1 - -
- exp2 1 1 1 - -
- exp2l 1 - 1 - -
- expm1f 1 1 1 1 -
- expm1 1 1 1 1 -
- expm1l 1 - 1 - -
- fabsf - - - - -
- fabs - - - - -
- fabsl - - - - -
- fdimf - - - - -
- fdim - - - - -
- fdiml - - - - -
- floorf - - - - -
- floor - - - - -
- floorl - - - - -
- fmaf - - - - -
- fma - - - - -
- fmal - - - - -
- fmaxf - - - - -
- fmax - - - - -
- fmaxl - - - - -
- fmaxmagf - - - - -
- fmaxmag - - - - -
- fmaxmagl - - - - -
- fminf - - - - -
- fmin - - - - -
- fminl - - - - -
- fminmagf - - - - -
- fminmag - - - - -
- fminmagl - - - - -
- fmodf - - - - -
- fmod - - - - -
- fmodl - - - - -
- frexpf - - - - -
- frexp - - - - -
- frexpl - - - - -
- fromfpf - - - - -
- fromfp - - - - -
- fromfpl - - - - -
- fromfpxf - - - - -
- fromfpx - - - - -
- fromfpxl - - - - -
- gammaf 4 4 4 - -
- gamma 3 4 4 - -
- gammal 5 - 5 - -
- hypotf - - - 1 -
- hypot 1 1 1 - -
- hypotl 1 - 1 - -
- ilogbf - - - - -
- ilogb - - - - -
- ilogbl - - - - -
- j0f 2 2 2 2 -
- j0 2 2 2 2 -
- j0l 2 - 2 - -
- j1f 2 2 2 2 -
- j1 1 1 1 1 -
- j1l 4 - 4 - -
- jnf 4 4 4 4 -
- jn 4 4 4 4 -
- jnl 7 - 7 - -
- lgammaf 4 4 4 2 -
- lgamma 3 4 4 1 -
- lgammal 5 - 5 - -
- llogbf - - - - -
- llogb - - - - -
- llogbl - - - - -
- lrintf - - - - -
- lrint - - - - -
- lrintl - - - - -
- llrintf - - - - -
- llrint - - - - -
- llrintl - - - - -
- logf 1 1 1 - -
- log - - - - -
- logl 1 - 1 - -
- log10f 2 2 2 2 -
- log10 2 2 2 1 -
- log10l 1 - 1 - -
- log1pf 1 1 1 1 -
- log1p 1 1 1 - -
- log1pl 2 - 2 - -
- log2f 1 1 1 - -
- log2 1 2 2 - -
- log2l 2 - 2 - -
- logbf - - - - -
- logb - - - - -
- logbl - - - - -
- lroundf - - - - -
- lround - - - - -
- lroundl - - - - -
- llroundf - - - - -
- llround - - - - -
- llroundl - - - - -
- modff - - - - -
- modf - - - - -
- modfl - - - - -
- nearbyintf - - - - -
- nearbyint - - - - -
- nearbyintl - - - - -
- nextafterf - - - - -
- nextafter - - - - -
- nextafterl - - - - -
- nextdownf - - - - -
- nextdown - - - - -
- nextdownl - - - - -
- nexttowardf - - - - -
- nexttoward - - - - -
- nexttowardl - - - - -
- nextupf - - - - -
- nextup - - - - -
- nextupl - - - - -
- powf 1 1 1 - -
- pow - - - - -
- powl 2 - 2 - -
- remainderf - - - - -
- remainder - - - - -
- remainderl - - - - -
- remquof - - - - -
- remquo - - - - -
- remquol - - - - -
- rintf - - - - -
- rint - - - - -
- rintl - - - - -
- roundf - - - - -
- round - - - - -
- roundl - - - - -
- roundevenf - - - - -
- roundeven - - - - -
- roundevenl - - - - -
- scalbf - - - - -
- scalb - - - - -
- scalbl - - - - -
- scalbnf - - - - -
- scalbn - - - - -
- scalbnl - - - - -
- sinf 1 1 1 - -
- sin - - - - -
- sinl 1 - 1 - -
- sincosf 1 1 1 1 -
- sincos - - - 1 -
- sincosl 1 - 1 - -
- sinhf 2 2 2 - -
- sinh 2 2 2 - -
- sinhl 2 - 2 - -
- sqrtf - - - - -
- sqrt - - - - -
- sqrtl - - - - -
- tanf 1 1 1 - -
- tan - - - 1 -
- tanl 1 - 1 - -
- tanhf 2 2 2 - -
- tanh 2 2 2 - -
- tanhl 2 - 2 - -
- tgammaf 4 4 4 1 -
- tgamma 5 5 5 1 -
- tgammal 4 - 4 - -
- truncf - - - - -
- trunc - - - - -
- truncl - - - - -
- ufromfpf - - - - -
- ufromfp - - - - -
- ufromfpl - - - - -
- ufromfpxf - - - - -
- ufromfpx - - - - -
- ufromfpxl - - - - -
- y0f 1 1 1 1 -
- y0 2 2 2 2 -
- y0l 3 - 3 - -
- y1f 2 2 2 2 -
- y1 3 3 3 3 -
- y1l 2 - 2 - -
- ynf 2 2 2 2 -
- yn 3 3 3 3 -
- ynl 5 - 5 - -
- Function HPPA IA64 M68k MIPS 32-bit MIPS 64-bit
- acosf 1 - - 1 1
- acos - - - - -
- acosl - - - - 1
- acoshf 2 - 1 2 2
- acosh 2 - 1 2 2
- acoshl - - 1 - 2
- asinf 1 - - 1 1
- asin - - - - -
- asinl - - - - 1
- asinhf 1 - 1 1 1
- asinh 1 - 1 1 1
- asinhl - - 1 - 3
- atanf 1 - - 1 1
- atan - - - - -
- atanl - - - - 1
- atanhf 2 - - 2 2
- atanh 2 - - 2 2
- atanhl - - - - 3
- atan2f 1 - 1 1 1
- atan2 - - - - -
- atan2l - - 1 - 1
- cabsf - - - - -
- cabs 1 - 1 1 1
- cabsl - - 1 - 1
- cacosf 2 + i 2 2 + i 2 2 + i 1 2 + i 2 2 + i 2
- cacos 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
- cacosl - 1 + i 2 1 + i 2 - 2 + i 2
- cacoshf 2 + i 2 2 + i 2 1 + i 2 2 + i 2 2 + i 2
- cacosh 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
- cacoshl - 2 + i 1 2 + i 1 - 2 + i 2
- cargf 1 - 1 1 1
- carg - - - - -
- cargl - - 1 - 2
- casinf 1 + i 2 1 + i 2 1 + i 1 1 + i 2 1 + i 2
- casin 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
- casinl 1 + i 0 1 + i 2 1 + i 2 - 2 + i 2
- casinhf 2 + i 1 2 + i 1 1 + i 1 2 + i 1 2 + i 1
- casinh 5 + i 3 1 + i 1 1 + i 1 1 + i 1 1 + i 1
- casinhl 5 + i 3 2 + i 1 2 + i 1 - 2 + i 2
- catanf 1 + i 1 0 + i 1 0 + i 1 1 + i 1 1 + i 1
- catan 0 + i 1 0 + i 1 0 + i 1 0 + i 1 0 + i 1
- catanl 0 + i 1 0 + i 1 1 + i 1 - 1 + i 1
- catanhf 1 + i 1 1 + i 0 1 + i 0 1 + i 1 1 + i 1
- catanh 4 + i 0 1 + i 0 1 + i 0 1 + i 0 1 + i 0
- catanhl 4 + i 0 1 + i 0 1 + i 1 - 1 + i 1
- cbrtf 1 - 1 1 1
- cbrt 3 - 1 3 3
- cbrtl 1 - 1 - 1
- ccosf 1 + i 1 0 + i 1 - 1 + i 1 1 + i 1
- ccos 1 + i 1 1 + i 1 - 1 + i 1 1 + i 1
- ccosl 1 + i 0 1 + i 1 1 + i 1 - 1 + i 1
- ccoshf 1 + i 1 1 + i 1 - 1 + i 1 1 + i 1
- ccosh 1 + i 1 1 + i 1 - 1 + i 1 1 + i 1
- ccoshl 1 + i 0 0 + i 1 0 + i 1 - 1 + i 1
- ceilf - - - - -
- ceil - - - - -
- ceill - - - - -
- cexpf 1 + i 2 1 + i 2 - 1 + i 2 1 + i 2
- cexp 2 + i 1 2 + i 1 - 2 + i 1 2 + i 1
- cexpl - 1 + i 1 1 + i 1 - 1 + i 1
- cimagf - - - - -
- cimag - - - - -
- cimagl - - - - -
- clogf 3 + i 1 1 + i 0 2 + i 1 3 + i 1 3 + i 1
- clog 3 + i 0 1 + i 1 3 + i 1 3 + i 0 3 + i 0
- clogl - 1 + i 1 3 + i 1 - 2 + i 1
- clog10f 4 + i 2 2 + i 1 2 + i 1 4 + i 2 4 + i 2
- clog10 3 + i 2 2 + i 1 2 + i 1 3 + i 2 3 + i 2
- clog10l 0 + i 1 1 + i 1 3 + i 2 - 2 + i 2
- conjf - - - - -
- conj - - - - -
- conjl - - - - -
- copysignf - - - - -
- copysign - - - - -
- copysignl - - - - -
- cosf 1 - - 1 1
- cos 2 1 1 - -
- cosl 2 - - - 1
- coshf 1 - - 1 1
- cosh 1 - - 1 1
- coshl - - - - 1
- cpowf 4 + i 2 5 + i 2 3 + i 5 4 + i 2 4 + i 2
- cpow 2 + i 2 2 + i 0 1 + i 0 2 + i 0 2 + i 0
- cpowl 2 + i 2 3 + i 4 3 + i 1 - 4 + i 1
- cprojf - - - - -
- cproj - - - - -
- cprojl - - - - -
- crealf - - - - -
- creal - - - - -
- creall - - - - -
- csinf 1 + i 0 1 + i 1 - 1 + i 0 1 + i 0
- csin 1 + i 0 1 + i 0 - 1 + i 0 1 + i 0
- csinl - 1 + i 0 1 + i 0 - 1 + i 1
- csinhf 1 + i 1 1 + i 1 - 1 + i 1 1 + i 1
- csinh 0 + i 1 1 + i 1 - 0 + i 1 0 + i 1
- csinhl 0 + i 1 1 + i 0 1 + i 0 - 1 + i 1
- csqrtf 2 + i 2 1 + i 1 1 + i 1 2 + i 2 2 + i 2
- csqrt 2 + i 2 1 + i 1 1 + i 1 2 + i 2 2 + i 2
- csqrtl - 1 + i 1 2 + i 2 - 2 + i 2
- ctanf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
- ctan 1 + i 2 1 + i 2 1 + i 1 1 + i 2 1 + i 2
- ctanl 0 + i 1 2 + i 2 2 + i 2 - 3 + i 3
- ctanhf 1 + i 2 1 + i 1 1 + i 2 1 + i 2 1 + i 2
- ctanh 2 + i 2 2 + i 2 1 + i 1 2 + i 2 2 + i 2
- ctanhl 1 + i 0 1 + i 2 2 + i 2 - 3 + i 3
- erff 1 - 1 1 1
- erf 1 - - 1 1
- erfl 1 - 1 - 1
- erfcf 2 - 1 2 2
- erfc 3 - - 3 3
- erfcl 1 - 2 - 2
- expf 1 - - 1 1
- exp - - - - -
- expl - - - - 1
- exp10f 2 - - - -
- exp10 6 - - 2 2
- exp10l 6 - - - 2
- exp2f 1 - - 1 1
- exp2 1 - 1 1 1
- exp2l - - - - 1
- expm1f 1 - - 1 1
- expm1 1 - - 1 1
- expm1l 1 1 - - 1
- fabsf - - - - -
- fabs - - - - -
- fabsl - - - - -
- fdimf - - - - -
- fdim - - - - -
- fdiml - - - - -
- floorf - - - - -
- floor - - - - -
- floorl - - - - -
- fmaf - - - - -
- fma - - - - -
- fmal - - - - -
- fmaxf - - - - -
- fmax - - - - -
- fmaxl - - - - -
- fmaxmagf - - - - -
- fmaxmag - - - - -
- fmaxmagl - - - - -
- fminf - - - - -
- fmin - - - - -
- fminl - - - - -
- fminmagf - - - - -
- fminmag - - - - -
- fminmagl - - - - -
- fmodf - - - - -
- fmod - - - - -
- fmodl - - - - -
- frexpf - - - - -
- frexp - - - - -
- frexpl - - - - -
- fromfpf - - - - -
- fromfp - - - - -
- fromfpl - - - - -
- fromfpxf - - - - -
- fromfpx - - - - -
- fromfpxl - - - - -
- gammaf 4 - 1 4 4
- gamma 4 - - 4 4
- gammal - - 2 - 5
- hypotf 1 - - - -
- hypot 1 - 1 1 1
- hypotl - - 1 - 1
- ilogbf - - - - -
- ilogb - - - - -
- ilogbl - - - - -
- j0f 2 2 2 2 2
- j0 2 2 1 2 2
- j0l 2 2 2 - 2
- j1f 2 2 2 2 2
- j1 1 1 - 1 1
- j1l 1 1 1 - 4
- jnf 5 4 2 4 4
- jn 4 4 2 4 4
- jnl 4 4 4 - 7
- lgammaf 4 - 1 4 4
- lgamma 4 - - 4 4
- lgammal 1 - 2 - 5
- llogbf - - - - -
- llogb - - - - -
- llogbl - - - - -
- lrintf - - - - -
- lrint - - - - -
- lrintl - - - - -
- llrintf - - - - -
- llrint - - - - -
- llrintl - - - - -
- logf 1 - - 1 1
- log - - - - -
- logl - - - - 1
- log10f 2 - - 2 2
- log10 2 - - 2 2
- log10l 1 - - - 1
- log1pf 1 - - 1 1
- log1p 1 - - 1 1
- log1pl - - - - 2
- log2f 1 - - 1 1
- log2 2 - - 2 2
- log2l - - - - 2
- logbf - - - - -
- logb - - - - -
- logbl - - - - -
- lroundf - - - - -
- lround - - - - -
- lroundl - - - - -
- llroundf - - - - -
- llround - - - - -
- llroundl - - - - -
- modff - - - - -
- modf - - - - -
- modfl - - - - -
- nearbyintf - - - - -
- nearbyint - - - - -
- nearbyintl - - - - -
- nextafterf - - - - -
- nextafter - - - - -
- nextafterl - - - - -
- nextdownf - - - - -
- nextdown - - - - -
- nextdownl - - - - -
- nexttowardf - - - - -
- nexttoward - - - - -
- nexttowardl - - - - -
- nextupf - - - - -
- nextup - - - - -
- nextupl - - - - -
- powf 1 - 7 1 1
- pow - - 1 - -
- powl - - 9 - 2
- remainderf - - - - -
- remainder - - - - -
- remainderl - - - - -
- remquof - - - - -
- remquo - - - - -
- remquol - - - - -
- rintf - - - - -
- rint - - - - -
- rintl - - - - -
- roundf - - - - -
- round - - - - -
- roundl - - - - -
- roundevenf - - - - -
- roundeven - - - - -
- roundevenl - - - - -
- scalbf - - - - -
- scalb - - - - -
- scalbl - - - - -
- scalbnf - - - - -
- scalbn - - - - -
- scalbnl - - - - -
- sinf 1 - - 1 1
- sin - 1 1 - -
- sinl - - - - 1
- sincosf 1 - - 1 1
- sincos 1 1 - - -
- sincosl 1 - - - 1
- sinhf 2 - - 2 2
- sinh 2 - - 2 2
- sinhl - - - - 2
- sqrtf - - - - -
- sqrt - - - - -
- sqrtl - - - - -
- tanf 1 - - 1 1
- tan 1 - - - -
- tanl 1 - - - 1
- tanhf 2 - - 2 2
- tanh 2 - - 2 2
- tanhl - - - - 2
- tgammaf 4 - 4 4 4
- tgamma 5 - 1 5 5
- tgammal 1 1 9 - 4
- truncf - - - - -
- trunc - - - - -
- truncl - - - - -
- ufromfpf - - - - -
- ufromfp - - - - -
- ufromfpl - - - - -
- ufromfpxf - - - - -
- ufromfpx - - - - -
- ufromfpxl - - - - -
- y0f 1 1 1 1 1
- y0 2 2 1 2 2
- y0l 2 1 1 - 3
- y1f 2 2 3 2 2
- y1 3 3 1 3 3
- y1l 3 2 2 - 2
- ynf 2 3 3 2 2
- yn 3 3 2 3 3
- ynl 3 2 4 - 5
- Function MicroBlaze Nios II PowerPC PowerPC S/390
- soft-float
- acosf - 1 1 1 1
- acos - - - - -
- acosl - - 1 1 1
- acoshf - 2 2 2 2
- acosh 1 2 2 2 2
- acoshl - - 2 1 2
- asinf - 1 1 1 1
- asin - - - - -
- asinl - - 2 2 1
- asinhf 1 1 1 1 1
- asinh 1 1 1 1 1
- asinhl - - 2 2 3
- atanf - 1 1 1 1
- atan - - 1 - -
- atanl - - 1 1 1
- atanhf 1 2 2 2 2
- atanh - 2 2 2 2
- atanhl - - 2 2 3
- atan2f 1 1 1 1 1
- atan2 - - - - -
- atan2l - - 2 2 1
- cabsf - - - - -
- cabs - 1 1 1 1
- cabsl - - 1 1 1
- cacosf 2 + i 2 2 + i 2 2 + i 2 2 + i 2 2 + i 2
- cacos 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
- cacosl - - 1 + i 2 2 + i 1 2 + i 2
- cacoshf 2 + i 2 2 + i 2 2 + i 2 2 + i 2 2 + i 2
- cacosh 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
- cacoshl - - 2 + i 1 1 + i 2 2 + i 2
- cargf - 1 1 1 1
- carg - - 1 - -
- cargl - - 2 2 2
- casinf 1 + i 2 1 + i 2 1 + i 2 1 + i 2 1 + i 2
- casin 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
- casinl - - 1 + i 2 2 + i 1 2 + i 2
- casinhf 2 + i 1 2 + i 1 2 + i 1 2 + i 1 2 + i 1
- casinh 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
- casinhl - - 2 + i 1 1 + i 2 2 + i 2
- catanf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
- catan 0 + i 1 0 + i 1 0 + i 1 0 + i 1 0 + i 1
- catanl - - 1 + i 1 1 + i 1 1 + i 1
- catanhf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
- catanh 1 + i 0 1 + i 0 1 + i 0 1 + i 0 1 + i 0
- catanhl - - 1 + i 1 1 + i 1 1 + i 1
- cbrtf 1 1 1 1 1
- cbrt 1 3 3 3 3
- cbrtl - - 1 1 1
- ccosf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
- ccos 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
- ccosl - - 1 + i 2 1 + i 2 1 + i 1
- ccoshf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
- ccosh 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
- ccoshl - - 1 + i 2 1 + i 2 1 + i 1
- ceilf - - - - -
- ceil - - - - -
- ceill - - - - -
- cexpf 1 + i 2 1 + i 2 1 + i 2 1 + i 2 1 + i 2
- cexp 2 + i 1 2 + i 1 2 + i 1 2 + i 1 2 + i 1
- cexpl - - 2 + i 2 1 + i 1 1 + i 1
- cimagf - - - - -
- cimag - - - - -
- cimagl - - - - -
- clogf 1 + i 1 3 + i 1 3 + i 1 3 + i 1 3 + i 1
- clog 1 + i 0 3 + i 0 3 + i 1 3 + i 0 3 + i 0
- clogl - - 5 + i 2 2 + i 2 2 + i 1
- clog10f 2 + i 1 4 + i 2 4 + i 2 4 + i 2 4 + i 2
- clog10 2 + i 1 3 + i 2 3 + i 2 3 + i 2 3 + i 2
- clog10l - - 3 + i 2 3 + i 2 2 + i 2
- conjf - - - - -
- conj - - - - -
- conjl - - - - -
- copysignf - - - - -
- copysign - - - - -
- copysignl - - - - -
- cosf 1 1 1 1 1
- cos - - - - -
- cosl - - 4 4 1
- coshf 1 1 1 1 1
- cosh 1 1 1 1 1
- coshl - - 3 3 1
- cpowf 4 + i 2 4 + i 2 5 + i 2 4 + i 2 5 + i 2
- cpow 2 + i 0 2 + i 0 2 + i 0 2 + i 0 2 + i 0
- cpowl - - 4 + i 2 4 + i 1 4 + i 1
- cprojf - - - - -
- cproj - - - - -
- cprojl - - - - -
- crealf - - - - -
- creal - - - - -
- creall - - - - -
- csinf 1 + i 0 1 + i 0 1 + i 0 1 + i 0 1 + i 0
- csin 1 + i 0 1 + i 0 1 + i 0 1 + i 0 1 + i 0
- csinl - - 2 + i 1 2 + i 1 1 + i 1
- csinhf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
- csinh 0 + i 1 0 + i 1 0 + i 1 0 + i 1 0 + i 1
- csinhl - - 1 + i 2 1 + i 2 1 + i 1
- csqrtf 1 + i 1 2 + i 2 2 + i 2 2 + i 2 2 + i 2
- csqrt 1 + i 1 2 + i 2 2 + i 2 2 + i 2 2 + i 2
- csqrtl - - 1 + i 1 1 + i 1 2 + i 2
- ctanf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
- ctan 1 + i 2 1 + i 2 1 + i 2 1 + i 2 1 + i 2
- ctanl - - 3 + i 2 3 + i 2 3 + i 3
- ctanhf 1 + i 2 1 + i 2 2 + i 1 1 + i 2 2 + i 1
- ctanh 2 + i 2 2 + i 2 2 + i 2 2 + i 2 2 + i 2
- ctanhl - - 3 + i 3 2 + i 3 3 + i 3
- erff - 1 1 1 1
- erf 1 1 1 1 1
- erfl - - 1 1 1
- erfcf 1 2 2 2 2
- erfc 1 3 2 3 2
- erfcl - - 3 3 2
- expf - 1 1 1 1
- exp - - 1 - -
- expl - - 1 1 1
- exp10f - - - - -
- exp10 1 2 2 2 2
- exp10l - - 1 1 2
- exp2f - 1 1 1 1
- exp2 - 1 1 1 1
- exp2l - - 2 1 1
- expm1f 1 1 1 1 1
- expm1 1 1 1 1 1
- expm1l - - 1 1 1
- fabsf - - - - -
- fabs - - - - -
- fabsl - - - - -
- fdimf - - - - -
- fdim - - - - -
- fdiml - - - - -
- floorf - - - - -
- floor - - - - -
- floorl - - - - -
- fmaf - - - - -
- fma - - - - -
- fmal - - 1 1 -
- fmaxf - - - - -
- fmax - - - - -
- fmaxl - - - - -
- fmaxmagf - - - - -
- fmaxmag - - - - -
- fmaxmagl - - - - -
- fminf - - - - -
- fmin - - - - -
- fminl - - - - -
- fminmagf - - - - -
- fminmag - - - - -
- fminmagl - - - - -
- fmodf - - - - -
- fmod - - - - -
- fmodl - - 1 1 -
- frexpf - - - - -
- frexp - - - - -
- frexpl - - - - -
- fromfpf - - - - -
- fromfp - - - - -
- fromfpl - - - - -
- fromfpxf - - - - -
- fromfpx - - - - -
- fromfpxl - - - - -
- gammaf 1 4 4 4 4
- gamma 1 4 3 4 3
- gammal - - 3 3 5
- hypotf - - - - -
- hypot 1 1 1 1 1
- hypotl - - 1 1 1
- ilogbf - - - - -
- ilogb - - - - -
- ilogbl - - - - -
- j0f 2 2 2 2 2
- j0 2 2 2 2 2
- j0l - - 2 2 2
- j1f 2 2 2 2 2
- j1 1 1 1 1 1
- j1l - - 2 1 4
- jnf 4 4 4 4 4
- jn 4 4 4 4 4
- jnl - - 4 4 7
- lgammaf 1 4 4 4 4
- lgamma 1 4 3 4 3
- lgammal - - 3 3 5
- llogbf - - - - -
- llogb - - - - -
- llogbl - - - - -
- lrintf - - - - -
- lrint - - - - -
- lrintl - - - - -
- llrintf - - - - -
- llrint - - - - -
- llrintl - - - - -
- logf 1 1 1 1 1
- log - - - - -
- logl - - 1 1 1
- log10f 2 2 2 2 2
- log10 1 2 2 2 2
- log10l - - 1 1 1
- log1pf 1 1 1 1 1
- log1p - 1 1 1 1
- log1pl - - 2 2 2
- log2f - 1 1 1 1
- log2 - 2 1 2 1
- log2l - - 1 1 2
- logbf - - - - -
- logb - - - - -
- logbl - - - - -
- lroundf - - - - -
- lround - - - - -
- lroundl - - - - -
- llroundf - - - - -
- llround - - - - -
- llroundl - - - - -
- modff - - - - -
- modf - - - - -
- modfl - - - - -
- nearbyintf - - - - -
- nearbyint - - - - -
- nearbyintl - - - - -
- nextafterf - - - - -
- nextafter - - - - -
- nextafterl - - - - -
- nextdownf - - - - -
- nextdown - - - - -
- nextdownl - - - - -
- nexttowardf - - - - -
- nexttoward - - - - -
- nexttowardl - - - - -
- nextupf - - - - -
- nextup - - - - -
- nextupl - - - - -
- powf 1 3 1 1 1
- pow - - - - -
- powl - - 1 1 2
- remainderf - - - - -
- remainder - - - - -
- remainderl - - - - -
- remquof - - - - -
- remquo - - - - -
- remquol - - - - -
- rintf - - - - -
- rint - - - - -
- rintl - - - - -
- roundf - - - - -
- round - - - - -
- roundl - - - - -
- roundevenf - - - - -
- roundeven - - - - -
- roundevenl - - - - -
- scalbf - - - - -
- scalb - - - - -
- scalbl - - - - -
- scalbnf - - - - -
- scalbn - - - - -
- scalbnl - - - - -
- sinf 1 1 1 1 1
- sin - - - - -
- sinl - - 1 1 1
- sincosf 1 1 1 1 1
- sincos - - - - -
- sincosl - - 1 1 1
- sinhf - 2 2 2 2
- sinh - 2 2 2 2
- sinhl - - 3 3 2
- sqrtf - - - - -
- sqrt - - - - -
- sqrtl - - 1 1 -
- tanf - 1 1 1 1
- tan - - - - -
- tanl - - 2 2 1
- tanhf - 2 2 2 2
- tanh - 2 2 2 2
- tanhl - - 1 1 2
- tgammaf 3 5 4 4 4
- tgamma 4 5 5 5 5
- tgammal - - 5 3 4
- truncf - - - - -
- trunc - - - - -
- truncl - - - - -
- ufromfpf - - - - -
- ufromfp - - - - -
- ufromfpl - - - - -
- ufromfpxf - - - - -
- ufromfpx - - - - -
- ufromfpxl - - - - -
- y0f 1 1 1 1 1
- y0 2 2 2 2 2
- y0l - - 1 1 3
- y1f 2 2 2 2 2
- y1 3 3 3 3 3
- y1l - - 2 2 2
- ynf 2 2 2 2 2
- yn 3 3 3 3 3
- ynl - - 2 2 5
- Function SH Sparc Tile i686 ix86
- acosf - 1 1 - -
- acos - - - 1 1
- acosl - 1 - 1 1
- acoshf - 2 2 - -
- acosh 1 2 2 1 1
- acoshl - 2 - 2 2
- asinf - 1 1 - -
- asin - - - 1 1
- asinl - 1 - 1 1
- asinhf 1 1 1 - -
- asinh 1 1 1 1 1
- asinhl - 3 - 3 3
- atanf - 1 1 - -
- atan - - - 1 1
- atanl - 1 - 1 1
- atanhf 1 2 2 - -
- atanh - 2 2 1 1
- atanhl - 3 - 3 3
- atan2f 1 1 1 - -
- atan2 - - - 1 1
- atan2l - 1 - 1 1
- cabsf - - - - -
- cabs - 1 1 1 1
- cabsl - 1 - 1 1
- cacosf 2 + i 2 2 + i 2 2 + i 2 1 + i 1 1 + i 1
- cacos 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
- cacosl - 2 + i 2 - 1 + i 2 1 + i 2
- cacoshf 2 + i 2 2 + i 2 2 + i 2 1 + i 1 1 + i 1
- cacosh 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
- cacoshl - 2 + i 2 - 2 + i 1 2 + i 1
- cargf - 1 1 - -
- carg - - - 1 1
- cargl - 2 - 1 1
- casinf 1 + i 2 1 + i 2 1 + i 2 1 + i 1 1 + i 1
- casin 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
- casinl - 2 + i 2 - 1 + i 2 1 + i 2
- casinhf 2 + i 1 2 + i 1 2 + i 1 1 + i 1 1 + i 1
- casinh 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
- casinhl - 2 + i 2 - 2 + i 1 2 + i 1
- catanf 1 + i 1 1 + i 1 1 + i 1 0 + i 1 0 + i 1
- catan 0 + i 1 0 + i 1 0 + i 1 0 + i 1 0 + i 1
- catanl - 1 + i 1 - 0 + i 1 0 + i 1
- catanhf 1 + i 1 1 + i 1 1 + i 1 1 + i 0 1 + i 0
- catanh 1 + i 0 1 + i 0 1 + i 0 1 + i 0 1 + i 0
- catanhl - 1 + i 1 - 1 + i 0 1 + i 0
- cbrtf 1 1 1 1 1
- cbrt 1 3 3 1 1
- cbrtl - 1 - 3 3
- ccosf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
- ccos 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
- ccosl - 1 + i 1 - 1 + i 1 1 + i 1
- ccoshf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
- ccosh 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
- ccoshl - 1 + i 1 - 1 + i 1 1 + i 1
- ceilf - - - - -
- ceil - - - - -
- ceill - - - - -
- cexpf 1 + i 2 1 + i 2 1 + i 2 1 + i 2 1 + i 2
- cexp 2 + i 1 2 + i 1 2 + i 1 2 + i 1 2 + i 1
- cexpl - 1 + i 1 - 1 + i 1 1 + i 1
- cimagf - - - - -
- cimag - - - - -
- cimagl - - - - -
- clogf 1 + i 1 3 + i 1 3 + i 1 1 + i 0 1 + i 0
- clog 1 + i 0 3 + i 0 3 + i 0 2 + i 1 2 + i 1
- clogl - 4 + i 1 - 3 + i 1 3 + i 1
- clog10f 2 + i 1 4 + i 2 4 + i 2 2 + i 0 2 + i 0
- clog10 2 + i 1 3 + i 2 3 + i 2 2 + i 1 2 + i 1
- clog10l - 4 + i 2 - 4 + i 2 4 + i 2
- conjf - - - - -
- conj - - - - -
- conjl - - - - -
- copysignf - - - - -
- copysign - - - - -
- copysignl - - - - -
- cosf 1 1 1 - 1
- cos - - - - -
- cosl - 1 - 1 1
- coshf 1 1 1 1 1
- cosh 1 1 1 1 1
- coshl - 1 - 2 2
- cpowf 4 + i 2 4 + i 2 4 + i 2 5 + i 2 5 + i 2
- cpow 2 + i 0 2 + i 0 2 + i 0 2 + i 1 2 + i 0
- cpowl - 4 + i 1 - 3 + i 4 3 + i 4
- cprojf - - - - -
- cproj - - - - -
- cprojl - - - - -
- crealf - - - - -
- creal - - - - -
- creall - - - - -
- csinf 1 + i 0 1 + i 0 1 + i 0 1 + i 1 1 + i 1
- csin 1 + i 0 1 + i 0 1 + i 0 1 + i 1 1 + i 0
- csinl - 1 + i 1 - 1 + i 0 1 + i 0
- csinhf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 0 + i 1
- csinh 0 + i 1 0 + i 1 0 + i 1 1 + i 1 0 + i 1
- csinhl - 1 + i 1 - 1 + i 1 1 + i 1
- csqrtf 1 + i 1 2 + i 2 2 + i 2 0 + i 1 0 + i 1
- csqrt 1 + i 1 2 + i 2 2 + i 2 1 + i 1 1 + i 1
- csqrtl - 2 + i 2 - 2 + i 2 2 + i 2
- ctanf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
- ctan 1 + i 2 1 + i 2 1 + i 2 1 + i 1 1 + i 1
- ctanl - 3 + i 3 - 2 + i 1 2 + i 1
- ctanhf 1 + i 2 1 + i 2 1 + i 2 1 + i 1 1 + i 1
- ctanh 2 + i 2 2 + i 2 2 + i 2 1 + i 1 1 + i 1
- ctanhl - 3 + i 3 - 1 + i 2 1 + i 2
- erff - 1 1 1 1
- erf 1 1 1 1 1
- erfl - 1 - 1 1
- erfcf 1 2 2 1 1
- erfc 1 3 3 1 1
- erfcl - 2 - 3 3
- expf - 1 1 - -
- exp - - - 1 1
- expl - 1 - 1 1
- exp10f - - - - -
- exp10 1 2 2 1 1
- exp10l - 2 - 1 1
- exp2f - 1 1 - -
- exp2 - 1 1 1 1
- exp2l - 1 - 1 1
- expm1f 1 1 1 - -
- expm1 1 1 1 1 1
- expm1l - 1 - 2 2
- fabsf - - - - -
- fabs - - - - -
- fabsl - - - - -
- fdimf - - - - -
- fdim - - - - -
- fdiml - - - - -
- floorf - - - - -
- floor - - - - -
- floorl - - - - -
- fmaf - - - - -
- fma - - - - -
- fmal - - - - -
- fmaxf - - - - -
- fmax - - - - -
- fmaxl - - - - -
- fmaxmagf - - - - -
- fmaxmag - - - - -
- fmaxmagl - - - - -
- fminf - - - - -
- fmin - - - - -
- fminl - - - - -
- fminmagf - - - - -
- fminmag - - - - -
- fminmagl - - - - -
- fmodf - - - - -
- fmod - - - - -
- fmodl - - - - -
- frexpf - - - - -
- frexp - - - - -
- frexpl - - - - -
- fromfpf - - - - -
- fromfp - - - - -
- fromfpl - - - - -
- fromfpxf - - - - -
- fromfpx - - - - -
- fromfpxl - - - - -
- gammaf 1 4 4 3 2
- gamma 1 4 4 3 3
- gammal - 5 - 4 4
- hypotf - - - - -
- hypot 1 1 1 1 1
- hypotl - 1 - 1 1
- ilogbf - - - - -
- ilogb - - - - -
- ilogbl - - - - -
- j0f 2 2 2 1 1
- j0 2 2 2 1 1
- j0l - 2 - 2 2
- j1f 2 2 2 1 1
- j1 1 1 1 2 2
- j1l - 4 - 1 1
- jnf 4 4 4 3 3
- jn 4 4 4 2 2
- jnl - 7 - 4 4
- lgammaf 1 4 4 3 2
- lgamma 1 4 4 3 3
- lgammal - 5 - 4 4
- llogbf - - - - -
- llogb - - - - -
- llogbl - - - - -
- lrintf - - - - -
- lrint - - - - -
- lrintl - - - - -
- llrintf - - - - -
- llrint - - - - -
- llrintl - - - - -
- logf 1 1 1 - -
- log - - - 1 1
- logl - 1 - 1 1
- log10f 2 2 2 - -
- log10 1 2 2 1 1
- log10l - 1 - 1 1
- log1pf 1 1 1 - -
- log1p - 1 1 1 1
- log1pl - 2 - 2 2
- log2f - 1 1 - -
- log2 - 2 2 1 1
- log2l - 2 - 1 1
- logbf - - - - -
- logb - - - - -
- logbl - - - - -
- lroundf - - - - -
- lround - - - - -
- lroundl - - - - -
- llroundf - - - - -
- llround - - - - -
- llroundl - - - - -
- modff - - - - -
- modf - - - - -
- modfl - - - - -
- nearbyintf - - - - -
- nearbyint - - - - -
- nearbyintl - - - - -
- nextafterf - - - - -
- nextafter - - - - -
- nextafterl - - - - -
- nextdownf - - - - -
- nextdown - - - - -
- nextdownl - - - - -
- nexttowardf - - - - -
- nexttoward - - - - -
- nexttowardl - - - - -
- nextupf - - - - -
- nextup - - - - -
- nextupl - - - - -
- powf 1 3 3 - -
- pow - - - 1 1
- powl - 2 - 1 1
- remainderf - - - - -
- remainder - - - - -
- remainderl - - - - -
- remquof - - - - -
- remquo - - - - -
- remquol - - - - -
- rintf - - - - -
- rint - - - - -
- rintl - - - - -
- roundf - - - - -
- round - - - - -
- roundl - - - - -
- roundevenf - - - - -
- roundeven - - - - -
- roundevenl - - - - -
- scalbf - - - - -
- scalb - - - - -
- scalbl - - - - -
- scalbnf - - - - -
- scalbn - - - - -
- scalbnl - - - - -
- sinf 1 1 1 - 1
- sin - - - - -
- sinl - 1 - 1 1
- sincosf 1 1 1 - 1
- sincos - - - - -
- sincosl - 1 - 1 1
- sinhf - 2 2 - -
- sinh - 2 2 1 1
- sinhl - 2 - 2 2
- sqrtf - - - - -
- sqrt - - - - -
- sqrtl - - - - -
- tanf - 1 1 1 1
- tan - - - - -
- tanl - 1 - 2 2
- tanhf - 2 2 - -
- tanh - 2 2 1 1
- tanhl - 2 - 3 3
- tgammaf 3 5 5 3 3
- tgamma 4 5 5 3 3
- tgammal - 4 - 5 5
- truncf - - - - -
- trunc - - - - -
- truncl - - - - -
- ufromfpf - - - - -
- ufromfp - - - - -
- ufromfpl - - - - -
- ufromfpxf - - - - -
- ufromfpx - - - - -
- ufromfpxl - - - - -
- y0f 1 1 1 1 1
- y0 2 2 2 1 1
- y0l - 3 - 1 1
- y1f 2 2 2 2 2
- y1 3 3 3 2 2
- y1l - 2 - 2 2
- ynf 2 2 2 3 3
- yn 3 3 3 2 2
- ynl - 5 - 4 4
|