Monday, October 10, 2016

Freopen Stdout Binary Options

Volgens POSIX (sien aansoek gebruik artikel), freopen is oorspronklik bygevoeg C makliker te verander stdin en stdout om binêre modus. Ek vermoed as jy grawe deur die ANSI / ISO rasionaal dokumente wat jy kan steun vir daardie verklaring te vind. Soos POSIX dokumente, hierdie gebruik is nutteloos op POSIX stelsels (waar teks en binêre modus vereis om identies te tree) en eintlik skadelik as gevolg van 'n fout in die spesifikasie wat lei tot afkorting lêer as streng gevolg. Soos vir praktiese gebruike, hier is 'n paar wat ek kan dink: die vervanging van stdin. stdout. en stderr voor die uitvoering van eksterne programme - maar dit is nie vir my duidelik of POSIX vereis freopen dieselfde lêer descriptor aantal hergebruik as die oorspronklike lêer het al dan nie, so ek is nie seker dat dit is gewaarborg om te werk. Ek het altyd net gebruik oop en dup2 vir hierdie doel. 'n meld biblioteek dat 'n lêer neem van die oproeper kan gebruik freopen om dit in aanhegnavraag af te sit om al die data is aan die einde, selfs as 'n ander program skryf om die log lêer te verseker. As jy het al rondom geslaag en gestoor lêer verwysings na 'n aantal komponente in jou program en jy vind jouself later hoef te ondersteun uitruiling uit die lêer (byvoorbeeld, teken rotasie opkom), freopen is baie makliker as die opsporing van oral die lêer is gestoor en inbraak in kode om telkens op te dateer of wikkel die lêer in jou eie struktuur waarmee jy dit ruil. Die nut van al hierdie is beperk deur die swak gedrag of freopen op mislukking van die lêer word ongeldig en kan nie herwin, so as 'n deel van die program nog kan gebruik, moet jy 'n manier om verdere toegang of onmiddellik uitgang te verhoed vind. Net so, freopen is nie draad-veilige vir dieselfde rede moet dit misluk, toegang tot die lêer van enige ander draad resultate in ongedefinieerde gedrag. antwoord 12 November 10 In 22:37 Nee - freopen () is nie oorbodig. Dit kan jy 'n lêer as standaard insette, byvoorbeeld, wat anders kon jy nie staatmaak op die bereiking van oop. As jy 'n funksie te roep (waarvoor jy hoef nie die bronkode, sodat jy dit kan nie los) wat lees op 'n spesifieke lêer stroom (tipies standaard insette) of skryf oor 'n spesifieke lêer stroom (tipies standaard uitset), maar jy hoef wil die funksie om te lees van of skryf aan die lêer wat daar word in jou program, dan kan jy gebruik freopen () om dinge reg te stel sodat die funksie sien wat hulle verwag, maar kry die inligting van waar jy wil - of skryf dit waar jy wil. antwoord 12 November 10 In 21:41 Vovanium: as jy die stroom kan spesifiseer omdat die geroep kode gebruik fprintf () op die stroom jy dit inhandig, eerder as printf (). dan there39s geen rede om te gebruik freopen (). In 25 jaar van C-programmeertaal, don39t Ek dink I39ve gebruik freopen () meer as 'n paar keer, as dit. Soos R. daarop gewys, as jy wil om dinge te doen soos herstel standaard uitset terug na sy oorspronklike lêer na die verwysing is voltooi, jy val uit die omvang van die C standaard in grondgebied POSIX en gebruik lêer beskrywings. Byvoorbeeld, fdopen () skep 'n stroom vir 'n lêer descriptor dat I39ve gebruik dikwels. uitvoering maak Jonathan Leffler 12 November 10 by 23: 01The eenvoudige antwoord is nee. Die modus word bepaal wanneer die iostream voorwerp is gebou, en kan nie later verander word. Sommige implementering kan 'n manier om dit later te doen voorsien, maar dit isnt gestandaardiseer. Op sommige implementasies, doen 'n freopen op stdout dalk die modus te verander, maar ek dink dat formeel, dit is onwettig in C. (Dit is implementering omskryf in C.) En blykbaar, nie die geval is dit werk op jou implementering. Julle beste bet is om uit te vind hoe om jou stelsel name die konsole toestel (/ dev / tty onder Unix CONS. Ek dink onder Windows), maak dit in die verlangde modus, en uitset dit. antwoord 16 April 14 aan 11: 34You is hier: Tuis GT Puente GT Fondsinsameling Fondsinsameling In Puente ons nie net wil hê dat ons studente om akademies, maar ook daarin slaag om sosiaal, sodat ons moedig ons studente om hulself te herontwerp deur hulle uit te daag om buite te stap van hul gemaksone en as leiers. Een doeltreffende manier is om Puente studente meer verantwoordelik vir die programme fondsinsamelingspogings maak. As sodanig, tydens bak verkope ons studente is verantwoordelik vir aankom vroeë te rig, wat gebak, organisering goedere, tot stigting van billike pryse verkoop gebak, en doen afstand van enige onverkoopte goedere en / of toerusting wat gebruik word. Elke semester skeduleer ons ten minste twee of drie bak verkope, een karwas (waar moontlik) en twee geleentheid tekeninge. Die uitkoms is opmerklik nie net in finansiële gewin, maar bowenal in persoonlike groei. Ons studente volwasse, meer selfvertroue, demonstreer leierseienskappe, en die ontwikkeling van 'n sterker band met mekaar othera familie-agtige verband met hul Puente eweknieë. Klik hier as jy wil bydra tot Puente. afskrif 2015 Los Angeles Handel Tegniese Kollege Alle regte voorbehou 400 West WASHINGTON BLVD, Los Angeles CA 90015 Tel (213) 763-7000 Faks (213) 763-5393freopen, wfreopen Elkeen van hierdie funksies stuur 'n wyser na die nuut geopende lêer. As 'n fout begaan, die oorspronklike lêer is geslote en die funksie gee terug 'n NULL pointer waarde. As pad. wyse . of stroom is 'n nul pointer, of as lêernaam is 'n leë string, hierdie funksies te roep die ongeldig parameter hanteerder, soos beskryf in Parameter Validation. As uitvoering toegelaat word om voort te gaan, hierdie funksies Errno stel om EINVAL en terugkeer null. Sien doserrno, Errno, syserrlist, en sysnerr vir meer inligting oor hierdie en ander, fout kodes. Meer veilig weergawes van hierdie funksies bestaan, sien freopens, wfreopens. Die freopen funksie sluit die lêer tans verbonde aan stroom en reassigns stroom na die lêer wat deur pad. wfreopen is 'n wye-karakter weergawe van freopen die pad en af ​​argumente om wfreopen is wyd karakterstringe. wfreopen en freopen identies anders optree. Generiese teks Roetine Mappings freopen tipies gebruik word om die pre-oop lêers stdin lei. stdout. en stderr lêers wat deur die gebruiker. Die nuwe lêer wat verband hou met stroom is geopen met af, wat 'n karakterstring wat die tipe versoek vir die lêer toegang, soos volg: Maak vir lees. As die lêer bestaan ​​nie of kan nie gevind word nie, die freopen oproep versuim. Maak 'n leë lêer vir skryf. As die gegewe lêer bestaan, is die inhoud daarvan vernietig. Open vir skryf aan die einde van die lêer (aanbring) sonder die verwydering van die EOF merker voor die skryf van nuwe data na die lêer skep die lêer eerste as dit nie bestaan ​​nie. Maak vir beide lees en skryf. (Die lêer moet bestaan ​​nie.) Maak 'n leë lêer vir beide lees en skryf. As die gegewe lêer bestaan, is die inhoud daarvan vernietig. Maak vir lees en die aanbring van die aanbring van werking sluit die verwydering van die EOF merker voor nuwe data na die lêer geskryf word en die EOF merker herstel nadat skriftelik voltooi skep die lêer eerste as dit nie bestaan ​​nie. Gebruik die W en w tipes met sorg, omdat hulle bestaande lêers kan vernietig. Wanneer 'n lêer geopen met die A - of toegang tipe, al skryf bedrywighede plaasvind aan die einde van die lêer. Hoewel die lêer wyser kan herposisioneer met behulp fseek of rewind. die lêer wyser is altyd terug na die einde van die lêer verskuif voordat enige skryf operasie uitgevoer. Dus, kan bestaande data nie oorskryf. Die 'n modus nie die EOF merker te verwyder voor die aanbring van die lêer. Na aanbring plaasgevind het, die MS-DOS tik 'n bevel toon slegs data tot die oorspronklike EOF merker en nie enige data aangeheg aan die lêer. Die 'n modus nie verwyder die EOF merker voor die aanbring van die lêer. Na aanbring, die MS-DOS tik 'n bevel toon al die data in die lêer. Die 'n modus is wat nodig is vir die aanbring van 'n stroom lêer wat beëindig word met die CTRLZ EOF merker. Wanneer die r. w. of 'n toegang tipe gespesifiseer, beide lees en skryf word toegelaat (die lêer is gesê oop vir werk te wees). Maar wanneer jy oorskakel tussen lees en skryf, daar moet 'n tussenin fsetpos. fseek. of rewind werking. Die huidige posisie kan gespesifiseer word vir die fsetpos of fseek werking, as jy wil. In bykomend tot die bogenoemde waardes, kan een van die volgende karakters in die mode string ingesluit word om die vertaling af vir nuwe lyne spesifiseer. Ope in teks (vertaal) af vervoer returnlinefeed (CR-LF) kombinasies is vertaal in enkele nuwe reël (LF) karakters op insette LF karakters word na CR-LF kombinasies op uitset. Ook, CTRLZ geïnterpreteer as 'n einde van die lêer karakter op insette. In lêers oopgemaak om te lees of te skryf en te lees met 'n. die run-time tjeks biblioteek vir 'n CTRLZ aan die einde van die lêer en verwyder dit, indien moontlik. Dit word gedoen omdat die gebruik van fseek en ftell om te beweeg binne 'n lêer kan fseek laat onbehoorlik optree teen die einde van die lêer. Die T-opsie is 'n Microsoft uitbreiding wat nie waar ANSI port verlang moet gebruik word. Ope in binêre (onvertaalde) af bogenoemde vertalings onderdruk. As t of b nie gegee in af. die verstek vertaling af is gedefinieer deur die globale veranderlike fmode. As t of b vooraan die argument, die funksie versuim en opbrengste nul. Vir 'n bespreking van die teks en binêre modes, sien teks en binêre modus lêer I / O. fopen, wfopen Die fopen funksie die lêer wat gespesifiseer deur lêernaam open. By verstek, is 'n smal lêernaam string vertolk met behulp van die ANSI CODE (CPACP). In Windows Desktop aansoeke kan dit verander na die OEM CODE (CPOEMCP) deur die gebruik van die SetFileApisToOEM funksie. Jy kan die AreFileApisANSI funksie gebruik om te bepaal of lêernaam geïnterpreteer deur die ANSI of die stelsel verstek OEM CODE. wfopen is 'n wye-karakter weergawe van fopen die argumente om wfopen is wyd karakterstringe. Anders, wfopen en fopen tree identies. Net gebruik van wfopen het geen invloed op die gekodeerde karakter stel wat gebruik word in die lêer stroom. fopen aanvaar paaie wat geldig op die lêer stelsel op die punt van die uitvoering fopen is aanvaar UNC paaie en paaie wat die volgende behels gekarteer netwerk dryf solank die stelsel wat voer die kode het toegang tot die aandeel of gekarteer ry ten tyde van die uitvoering. Wanneer jy paaie te bou vir fopen. seker te maak dat dryf, paaie, of netwerk aandele sal beskikbaar wees in die uitvoering omgewing. Jy kan óf slashes (/) of skuinsstrepe () te gebruik as die gids skeiding in 'n pad. Gaan altyd die terugkeer waarde om te sien of die wyser is NULL voordat jy enige bykomende bedrywighede op die lêer uit te voer. As 'n fout begaan, is die globale veranderlike Errno stel en kan gebruik word om spesifieke fout inligting te bekom. Vir meer inligting, sien Errno, doserrno, syserrlist, en sysnerr. fopen Unicode lêer strome. Om 'n Unicode lêer oop te maak, slaag 'n CCS vlag wat die vereiste enkodering spesifiseer om fopen. soos volg. FILE FP fopen (nieuw. txt, rt, ccsencoding) Wanneer 'n lêer geopen in Unicode af, insette funksies vertaal die data dis lees van die lêer in UTF-16 data gestoor as tipe wchart. Funksies wat skryf 'n lêer geopen in Unicode af verwag buffers wat UTF-16 data gestoor as tipe wchart bevat. As die lêer is geïnkripteer as UTF-8, dan UTF-16 data is vertaal in UTF-8 wanneer dit geskryf is, en die lêers UTF-8-geïnkripteer inhoud is vertaal in UTF-16 wanneer dit gelees word. 'N poging om te lees of skryf 'n onewe aantal grepe in Unicode-modus veroorsaak dat 'n parameter validering fout. Kan lees of skryf data dis gestoor in jou program as UTF-8, gebruik 'n teks of binêre lêer af in plaas van 'n Unicode-modus. Jy is verantwoordelik vir enige vereiste enkodering vertaling. As die lêer bestaan ​​reeds en is oop vir die lees of aanbring, die byte volgorde Mark (BOM), indien dit teenwoordig is in die lêer, bepaal die enkodering. Die BOM enkodering neem voorkeur oor die enkodering wat bepaal deur die CCS vlag. Die CCS enkodering word slegs gebruik wanneer daar geen BOM teenwoordig is of die lêer is 'n nuwe lêer. BOM opsporing slegs van toepassing op lêers wat oopgemaak in Unicode-modus (dit wil sê deur die verbygaan van die CCS vlag). Die volgende tabel som die maniere wat gebruik word vir verskeie CCS vlae aan fopen en byte volgorde Punte in die lêer. Enkoderings Op grond van CCS Vlag en BOM lêers oopgemaak vir skryf in Unicode af het 'n BOM hulle geskryf outomaties. As modus is 'n, ccsltencodinggt, fopen eerste drieë om die lêer oop te maak deur die gebruik van beide lees en skryf toegang. As dit slaag, die funksie lees die BOM om die enkodering te bepaal vir die lêer as dit nie help nie, die funksie maak gebruik van die standaard kodering vir die lêer. In beide gevalle, fopen sal dan weer oop die lêer met behulp van skryf-net toegang. (Dit geld vir 'n af net, nie 'n modus.) Generiese-teks Roetine Mappings UNICODE amp MBCS nie gedefinieer Die karakterstring modus spesifiseer die soort toegang wat verlang word vir die lêer, soos volg. Maak vir lees. As die lêer bestaan ​​nie of kan nie gevind word nie, die fopen oproep versuim. Maak 'n leë lêer vir skryf. As die gegewe lêer bestaan, is die inhoud daarvan vernietig. Open vir skryf aan die einde van die lêer (aanbring) sonder die verwydering van die einde-van-lêer (EOF) merker voor nuwe data is geskryf om die lêer. Skep die lêer as dit bestaan ​​nie. Maak vir beide lees en skryf. Die lêer moet bestaan. Maak 'n leë lêer vir beide lees en skryf. As die lêer bestaan, is die inhoud daarvan vernietig. Maak vir lees en die aanbring. Die aanbring van werking sluit die verwydering van die EOF merker voor nuwe data is geskryf om die lêer. Die EOF merker is nie herstel nadat skriftelik voltooi. Skep die lêer as dit bestaan ​​nie. Wanneer 'n lêer geopen deur gebruik te maak van die 'n toegang tipe of die 'n toegang tipe, al skryf bedrywighede plaasvind aan die einde van die lêer. Die lêer wyser kan herposisioneer deur gebruik te maak van fseek of rewind. maar altyd terug na die einde van die lêer verskuif voordat enige skryf operasie uitgevoer word. Daarom kan bestaande data nie oorskryf. Die 'n modus nie die EOF merker te verwyder voordat dit voeg daar om die lêer. Na aanbring plaasgevind het, die MS-DOS tik 'n bevel toon slegs data tot die oorspronklike EOF merker en nie enige data aangeheg aan die lêer. Voor dit voeg daar om die lêer, die n modus nie verwyder die EOF merker. Na aanbring, die MS-DOS tik 'n bevel toon al die data in die lêer. Die 'n modus is wat nodig is vir die aanbring van 'n stroom lêer wat beëindig word met die CTRLZ EOF merker. Wanneer die r. w. of 'n toegang tipe gespesifiseer, beide lees en skryf in staat gestel word (die lêer is gesê oop vir werk te wees). Maar wanneer jy oorskakel van lees te skryf, die insette werking moet 'n EOF merker teëkom. As daar geen EOF, moet jy 'n gryp oproep na 'n lêer posisionering funksie gebruik. Die lêer posisionering funksies fsetpos. fseek. en rewind. Wanneer jy oorskakel van skryf te lees, moet jy 'n gryp oproep om óf fflush of om 'n lêer posisionering funksie gebruik. Benewens die vorige waardes, kan die volgende karakters aangeheg word aan modus om die vertaling af vir NEWLINE karakters spesifiseer. Ope in teks (vertaal) af. In hierdie modus, is CTRLZ geïnterpreteer word as 'n EOF karakter op insette. In lêers wat vir lees / skryf is geopen deur die gebruik van 'n. fopen tjeks vir 'n CTRLZ aan die einde van die lêer en verwyder dit, as dit moontlik is. Dit word gedoen omdat die gebruik van fseek en ftell om te beweeg binne 'n lêer wat eindig met CTRLZ kan fseek laat verkeerd optree teen die einde van die lêer. In teks af, is vervoer returnlinefeed kombinasies vertaal in enkele linefeeds op insette, en nuwe reël karakters word na returnlinefeed kombinasies Vraggeld op uitset. Wanneer 'n Unicode stroom-I / O funksie bedryf in die teks af (die verstek), is die bron of bestemming stroom veronderstel om 'n reeks van multibyte karakters wees. Daarom is die Unicode stroom-insette funksies omskep multibyte karakters wye karakters (asof deur 'n oproep om die mbtowc funksie). Om dieselfde rede, die Unicode stroom-uitset funksies omskep wye karakters te multibyte karakters (asof deur 'n oproep om die wctomb funksie). Ope in binêre (onvertaalde) af vertalings wat vervoer-opbrengs en nuwe reël karakters onderdruk. As t of b nie gegee in af. die verstek vertaling af is gedefinieer deur die globale veranderlike fmode. As t of b vooraan die argument, die funksie versuim en opbrengste nul. Vir meer inligting oor hoe om teks en binêre modes in Unicode en multibyte stroom-ek gebruik / O, sien teks en binêre modus lêer I-O en Unicode Stroom I-O in teks en binêre modes. Aktiveer die pleeg vlag vir die verband lêernaam sodat die inhoud van die lêer buffer direk geskryf op skyf as óf fflush of flushall genoem. Herstel die pleeg vlag vir die verband lêernaam geen-pleeg. Dit is die standaard. Dit oorheers ook die globale pleeg vlag as jy jou program met COMMODE. OBJ skakel. Die globale pleeg vlag verstek is geen pleeg nie, tensy jy uitdruklik skakel jou program met COMMODE. OBJ (sien skakel Options). Bepaal dat die lêer nie geërf deur kind prosesse. Bepaal dat caching is geskik vir, maar nie beperk tot, sekwensiële toegang vanaf skyf. Bepaal dat caching is geskik vir, maar nie beperk tot, ewetoeganklike van die skyf. Hiermee word 'n lêer as tydelike. As dit moontlik is, is dit nie gespoel op skyf. Hiermee word 'n lêer as tydelike. Dit is geskrap word wanneer die laaste lêer wyser is gesluit. Spesifiseer die gekodeerde karakter stel na gebruik (UTF-8. UTF-16LE. Of Unicode) vir hierdie lêer. Laat ongespesifiseerde as jy ANSI enkodering wil. Geldige karakters vir die mode string wat gebruik word in fopen en fdopen ooreenstem met argumente wat gebruik word in 'n oop en sopen Oflag deurgebring. soos volg. Karakters in mode string


No comments:

Post a Comment