Thursday, 26 October 2017

Freopen stdout binära alternativ


Öppnar filen vars namn anges i parameterns filnamn och associerar det med en ström som kan identifieras i framtida operationer genom att FILE-pekaren returneras. Operationer som är tillåtna på strömmen och hur dessa utförs definieras av lägesparametern. Den returnerade strömmen är helt buffert som standard om det inte är känt att det inte är en interaktiv enhet (se setbuf). Den återvändande pekaren kan disassocieras från filen genom att ringa fclose eller freopen. Alla öppna filer stängs automatiskt vid normal programavslutning. Den löpande miljön stöder åtminstone FOPENMAX-filer öppna samtidigt. Parametrar filnamn C-sträng som innehåller namnet på filen som ska öppnas. Dess värde ska följa filnamnspecifikationerna för den löpande miljön och kan inkludera en sökväg (om den stöds av systemet). C-sträng som innehåller ett filåtkomstläge. Det kan vara: läs: Öppna fil för inmatningsoperationer. Filen måste finnas. skriv: Skapa en tom fil för utmatningsoperationer. Om en fil med samma namn redan finns, kasseras innehållet och filen behandlas som en ny tom fil. lägg till: Öppna fil för utdata i slutet av en fil. Utmatningsoperationer skriver alltid data i slutet av filen och utökar den. Återställningsoperationer (fseek. Fsetpos. Spola) ignoreras. Filen skapas om den inte existerar. readupdate: Öppna en fil för uppdatering (både för inmatning och utmatning). Filen måste finnas. writeupdate: Skapa en tom fil och öppna den för uppdatering (både för inmatning och utmatning). Om en fil med samma namn redan finns, kasseras innehållet och filen behandlas som en ny tom fil. appendupdate: Öppna en fil för uppdatering (både för inmatning och utmatning) med alla utskriftsoperationer skrivdata i slutet av filen. Återställningsoperationer (fseek. Fsetpos. Spola) påverkar nästa ingångsoperation, men utmatningsoperationer flyttar läget tillbaka till slutet av filen. Filen skapas om den inte existerar. Med lägesspecifikatorerna ovan är filen öppen som en textfil. För att öppna en fil som en binär fil. en b-tecken måste ingå i lägessträngen. Denna extra b-karaktär kan antingen bifogas i slutet av strängen (sålunda gör följande förmedlade lägen: rb, wb, ab, rb, wb, ab) eller infogas mellan bokstaven och tecknet för blandade lägen (rb, wb, ab). Den nya C-standarden (C2011, som inte är en del av C) lägger till en ny standardspecifikation (x), som kan läggas till någon w specifier (för att bilda wx. Wbx, wx eller wbxwbx). Denna subspecifier tvingar funktionen att misslyckas om filen finns, istället för att skriva över den. Om ytterligare tecken följer sekvensen beror uppförandet på bibliotekets genomförande: vissa implementeringar kan ignorera ytterligare tecken, så att till exempel en extra t (ibland används för att uttryckligen ange en textfil) accepteras. På vissa biblioteksimplementeringar kan öppna eller skapa en textfil med uppdateringsläge behandla strömmen i stället som en binär fil. Textfiler är filer som innehåller sekvenser av textrader. Beroende på miljön där programmet körs kan viss konvertering av specialtecken inträffa i inputoutput-operationer i textläge för att anpassa dem till ett systemspecifikt textfilformat. Även om det i vissa miljöer inte sker några konverteringar och både textfiler och binära filer behandlas på samma sätt, med lämplig funktion förbättras portabiliteten. För filer som är öppna för uppdatering (de som innehåller ett tecken), där både inmatnings - och utmatningsoperationer är tillåtna ska strömmen spolas (fflush) eller ompositioneras (fseek. Fsetpos. Spolning) före en läsoperation som följer en skrivoperation. Strömmen ska omplaceras (fseek. Fsetpos. Spola tillbaka) före en skrivoperation som följer en läsoperation (när den inte nått slutet av filen). Returvärde Om filen öppnas, returnerar funktionen en pekare till ett FILE-objekt som kan användas för att identifiera strömmen vid framtida operationer. Annars returneras en nollpekare. På de flesta biblioteksimplementeringar är även errno-variabelen inställd på en systemspecifik felkod vid fel. Det enkla svaret är nej. Läget bestäms när iostream-objektet är konstruerat och kan inte ändras senare. Vissa implementeringar kan ge ett sätt att göra det senare, men detta är inte standardiserat. På vissa implementeringar kan en freopen på stdout ändra läget, även om jag tror att det formellt är detta förbjudet i C. (Det är implementering definierat i C.) Och det verkar tydligen inte på din implementering. Din bästa satsning är att ta reda på hur ditt system heter konsolenheten (devtty under Unix CONS. Jag tror, ​​under Windows), öppna den i önskat läge och mata ut det. svarat apr 16 14 vid 11: 34freopen (3) - Linux man sida fopen, fdopen, freopen - strömma öppna funktioner Funktionsprov Makrokrav för glibc (se featuretestmacros (7)): fdopen (): POSIXCSOURCE gt 1 XOPENSOURCE POSIXSOURCE Beskrivning Fopen () - funktionen öppnar filen vars namn strängen pekar på med sökvägen och associerar en ström med den. Argumentläget pekar på en sträng som börjar med en av följande sekvenser (eventuellt följt av ytterligare tecken, som beskrivs nedan): r Öppna textfilen för läsning. Strömmen är placerad i början av filen. Öppet för läsning och skrivning. Strömmen är placerad i början av filen. Avkorta filen till noll längd eller skapa textfil för skrivning. Strömmen är placerad i början av filen. Öppet för läsning och skrivning. Filen skapas om den inte existerar, annars är den avkortad. Strömmen är placerad i början av filen. Öppna för att lägga till (skrivande i slutet av filen). Filen skapas om den inte existerar. Strömmen är placerad i slutet av filen. Öppet för att läsa och bifoga (skriva i slutet av filen). Filen skapas om den inte existerar. Den ursprungliga filpositionen för läsning är i början av filen, men utmatningen är alltid bifogad till slutet av filen. Modussträngen kan också innehålla bokstaven b antingen som ett sista tecken eller som tecken mellan tecknen i någon av de två teckensträngarna som beskrivs ovan. Detta är strängt för kompatibilitet med C89 och har ingen effekt b ignoreras på alla POSIX-överensstämmande system, inklusive Linux. (Andra system kan hantera textfiler och binära filer på olika sätt, och lägga till b kan vara en bra idé om du gör IO till en binär fil och förväntar dig att ditt program kan skickas till icke-UNIX-miljöer.) Se NOTES nedan för detaljer om glibc förlängningar för läge. Alla skapade filer kommer att ha läge SIRUSR SIWUSR SIRGRP SIWGRP SIROTH SIWOTH (0666), som modifieras av processens umask värde (se umask (2)). Läser och skriver kan blandas i readwrite-strömmar i valfri ordning. Observera att ANSI C kräver att en filpositionsfunktion ingriper mellan utmatning och ingång, såvida inte en ingångsoperation möter slutändan. (Om detta villkor inte är uppfyllt kan en läs returnera resultatet av att skriva annat än det senaste.) Därför är det bra att använda (och ibland nödvändigtvis under Linux) att sätta en fseek (3) eller fgetpos (3) ) operation mellan skriv och läsoperationer på en sådan ström. Denna operation kan vara en uppenbar no-op (som i fseek (.0L, SEEKCUR) krävde sin synkroniseringseffekt. Öppna en fil i append-läge (a som första tecken i läget) orsakar alla efterföljande skrivoperationer till denna ström till förekommer vid slutet av filen, som om det föregick samtalet: Funktionen fdopen () associerar en ström med den befintliga filbeskrivaren, fd. Strömmens läge (ett av värdena r, r, w, w, a, a) måste vara kompatibel med filbeskrivarens läge. Indikator för filposition för den nya strömmen är inställd på den som tillhör fd. Felindikatorerna och slutindikatorerna rensas. Modes w eller w orsakar inte trunkering Filen beskrivs inte och kommer att stängas när strömmen som skapats av fdopen () är stängd. Resultatet av att fdopen () till ett delat minnesobjekt är odefinierat. Funktionen freopen () öppnar filen vars namnet är strängen pekad på med sökvägen och associerade strömmen pekade på genom att strömma med den. Den ursprungliga strömmen (om den existerar) är stängd. Modusargumentet används precis som i funktionen fopen (). Den primära användningen av funktionen freopen () är att ändra filen som är associerad med en standard textflöde (stderr. Stdin. Eller stdout). Returvärde När du har lyckats fullbordar fopen (), fdopen () och freopen () en FILE-pekare. Annars returneras NULL och errno är inställd för att indikera felet. Läget som gavs till fopen (), fdopen () eller freopen () var ogiltigt. Funktionerna fopen (), fdopen () och freopen () kan också misslyckas och ställa in errno för någon av de fel som anges för rutinmalloc (3). Funktionen fopen () kan också misslyckas och ange errno för någon av de fel som anges för rutinöppnandet (2). Funktionen fdopen () kan också misslyckas och ställa in errno för någon av de fel som anges för rutinfcntl (2). Funktionen freopen () kan också misslyckas och ställa in errno för någon av de fel som anges för rutinerna öppna (2), fclose (3) och fflush (3). Överensstämmer med Fopen () och freopen () - funktionerna överensstämmer med C89. Funktionen fdopen () överensstämmer med POSIX.1-1990. Glibc-anteckningar GNU C-biblioteket tillåter följande tillägg för strängen som anges i läget. c (sedan glibc 2.3.3) Gör inte den öppna driften eller efterföljande läs - och skrivoperationer, trådavstängningspunkter. Den här flaggan ignoreras för fdopen (). e (sedan glibc 2.7) Öppna filen med OCLOEXEC-flaggan. Se öppet (2) för mer information. Den här flaggan ignoreras för fdopen (). m (sedan glibc 2.3) Försök att komma åt filen med hjälp av mmap (2), i stället för IO-systemsamtal (läs (2), skriv (2)). För närvarande försöker användningen av mmap (2) endast att en fil öppnas för läsning. x Öppna filen exklusivt (som OEXCL-flaggan på öppen (2)). Om filen redan finns, misslyckas fopen () och sätter errno till EEXIST. Den här flaggan ignoreras för fdopen (). Förutom ovanstående tecken stödjer fopen () och freopen () följande syntax i läget. Den givna strängen är taget som namnet på en kodad teckenuppsättning och strömmen är markerad som brett orienterad. Därefter konverterar interna konverteringsfunktioner IO till och från teckenuppsättningsträngen. Om ccs-strängsyntaxen inte är specificerad bestäms bredbildningen av strömmen av den första filoperationen. Om den operationen är en bredbildsoperation är strömmen markerad vid brett orientering, och funktioner som ska konverteras till den kodade teckenuppsättningen laddas. När du analyserar för enskilda flaggtecken i läget (dvs. tecknen som föregår ccs-specifikationen) begränsar glibc-implementeringen av fopen () och freopen () antalet tecken som undersökts i mode till 7 (eller i glibc-versioner före 2,14 till 6 , vilket inte var tillräckligt för att inkludera möjliga specifikationer såsom rbcmxe). Den nuvarande implementeringen av fdopen () analyserar högst 5 tecken i läget. Hänvisat till av

No comments:

Post a Comment