Saturday 30 December 2017

Opções freopen stdin binárias


A resposta simples é não. O modo é determinado quando o objeto iostream é construído e não pode ser alterado posteriormente. Algumas implementações podem fornecer um meio de fazê-lo mais tarde, mas isso não está padronizado. Em algumas implementações, fazer um freopen no stdout pode mudar o modo, embora eu pense que formalmente, isso é proibido em C. (É implementação definida em C.) E, aparentemente, ele não funciona em sua implementação. Você é a melhor opção é descobrir como seu sistema nomeia o dispositivo de console (devtty em Unix CONS. Eu acho que, no Windows), abra-o no modo desejado e entregue-o. Respondeu 16 de abril de 14 às 11: 34 Reencaminhar fluxo com arquivo ou modo diferente Reutiliza o fluxo para abrir o arquivo especificado pelo nome do arquivo ou para mudar seu modo de acesso. Se um novo nome de arquivo for especificado, a função primeiro tenta fechar qualquer arquivo já associado ao fluxo (terceiro parâmetro) e desassociá-lo. Então, independentemente de esse fluxo ter sido fechado com sucesso ou não, o freopen abre o arquivo especificado pelo nome do arquivo e o associa com o fluxo, assim como fopen faria usando o modo especificado. Se o nome do arquivo for um ponteiro nulo, a função tenta mudar o modo da transmissão. Embora uma implementação particular da biblioteca tenha permissão para restringir as alterações permitidas, e em que circunstâncias. O indicador de erro e o indicador eof são apagados automaticamente (como se fosse chamado clearerr). Esta função é especialmente útil para redirecionar fluxos predefinidos como stdin. Stdout e stderr para arquivos específicos (veja o exemplo abaixo). Parâmetros filename Seqüência C contendo o nome do arquivo a ser aberto. Seu valor deve seguir as especificações do nome do arquivo do ambiente em execução e pode incluir um caminho (se suportado pelo sistema). Se esse parâmetro for um ponteiro nulo, a função tentará alterar o modo da transmissão. Como se o nome do arquivo atualmente associado a esse fluxo tivesse sido usado. Cadeia de modo C contendo um modo de acesso a arquivos. Pode ser: ler: abrir arquivo para operações de entrada. O arquivo deve existir. Escreva: crie um arquivo vazio para operações de saída. Se um arquivo com o mesmo nome já existe, seu conteúdo é descartado e o arquivo é tratado como um novo arquivo vazio. Anexar: Abra o arquivo para saída no final de um arquivo. As operações de saída sempre escrevem dados no final do arquivo, expandindo-o. As operações de reposicionamento (fseek. Fsetpos. Rebobinar) são ignoradas. O arquivo é criado se não existir. Readupdate: Abra um arquivo para atualização (tanto para entrada quanto para saída). O arquivo deve existir. Writeupdate: Crie um arquivo vazio e abra-o para atualização (tanto para entrada quanto para saída). Se um arquivo com o mesmo nome já existir, seus conteúdos serão descartados e o arquivo será tratado como um novo arquivo vazio. Appendupdate: Abra um arquivo para atualização (tanto para entrada quanto para saída) com todas as operações de saída que escrevem dados no final do arquivo. As operações de reposicionamento (fseek. Fsetpos. Remwind) afetam as próximas operações de entrada, mas as operações de saída movem a posição de volta ao final do arquivo. O arquivo é criado se não existir. Com os especificadores de modo acima, o arquivo está aberto como um arquivo de texto. Para abrir um arquivo como um arquivo binário. Um caractere b deve ser incluído na seqüência de modo. Este caractere B adicional pode ser anexado no final da string (fazendo assim os seguintes modos compostos: rb, wb, ab, rb, wb, ab) ou seja inserido entre a letra e o sinal para os modos mistos (rb, Wb, ab). O novo padrão C (C2017, que não faz parte de C) adiciona uma nova subespecificadora padrão (x), que pode ser anexada a qualquer especificador w (para formar wx. Wbx. Wx ou wbxwbx). Este sub-especificador força a função a falhar se o arquivo existe, em vez de substituí-lo. Se os caracteres adicionais seguem a seqüência, o comportamento depende da implementação da biblioteca: algumas implementações podem ignorar caracteres adicionais, de modo que, por exemplo, um t adicional (às vezes usado para indicar explicitamente um arquivo de texto) é aceito. Em algumas implementações de biblioteca, abrir ou criar um arquivo de texto com modo de atualização pode tratar o fluxo em vez disso como um arquivo binário. Transmitir ponteiro para um objeto FILE que identifica o fluxo a ser reaberto. Valor de retorno Se o arquivo for reaberto com sucesso, a função retornará o ponteiro passado como fluxo de parâmetros. Que pode ser usado para identificar o fluxo reaberto. Caso contrário, um ponteiro nulo é retornado. Na maioria das implementações da biblioteca, a variável errno também é definida como um código de erro específico do sistema na falha. Define o arquivo cujo nome é especificado no nome do arquivo do parâmetro e o associa a um fluxo que pode ser identificado em futuras operações pelo ponteiro do arquivo retornado . As operações que são permitidas no fluxo e como elas são executadas são definidas pelo parâmetro de modo. O fluxo retornado é totalmente armazenado por buffer, se for conhecido por não se referir a um dispositivo interativo (veja setbuf). O ponteiro retornado pode ser desassociado do arquivo chamando fclose ou freopen. Todos os arquivos abertos são fechados automaticamente no término normal do programa. O ambiente em execução suporta, pelo menos, arquivos FOPENMAX abertos simultaneamente. Parâmetros filename Seqüência C contendo o nome do arquivo a ser aberto. Seu valor deve seguir as especificações do nome do arquivo do ambiente em execução e pode incluir um caminho (se suportado pelo sistema). Cadeia de modo C contendo um modo de acesso a arquivos. Pode ser: ler: abrir arquivo para operações de entrada. O arquivo deve existir. Escreva: crie um arquivo vazio para operações de saída. Se um arquivo com o mesmo nome já existe, seu conteúdo é descartado e o arquivo é tratado como um novo arquivo vazio. Anexar: Abra o arquivo para saída no final de um arquivo. As operações de saída sempre escrevem dados no final do arquivo, expandindo-o. As operações de reposicionamento (fseek. Fsetpos. Rebobinar) são ignoradas. O arquivo é criado se não existir. Readupdate: Abra um arquivo para atualização (tanto para entrada quanto para saída). O arquivo deve existir. Writeupdate: Crie um arquivo vazio e abra-o para atualização (tanto para entrada quanto para saída). Se um arquivo com o mesmo nome já existir, seus conteúdos serão descartados e o arquivo será tratado como um novo arquivo vazio. Appendupdate: Abra um arquivo para atualização (tanto para entrada quanto para saída) com todas as operações de saída que escrevem dados no final do arquivo. As operações de reposicionamento (fseek. Fsetpos. Remwind) afetam as próximas operações de entrada, mas as operações de saída movem a posição de volta ao final do arquivo. O arquivo é criado se não existir. Com os especificadores de modo acima, o arquivo está aberto como um arquivo de texto. Para abrir um arquivo como um arquivo binário. Um caractere b deve ser incluído na seqüência de modo. Este caractere B adicional pode ser anexado no final da string (fazendo assim os seguintes modos compostos: rb, wb, ab, rb, wb, ab) ou seja inserido entre a letra e o sinal para os modos mistos (rb, Wb, ab). O novo padrão C (C2017, que não faz parte de C) adiciona uma nova subespecificadora padrão (x), que pode ser anexada a qualquer especificador w (para formar wx. Wbx. Wx ou wbxwbx). Este sub-especificador força a função a falhar se o arquivo existe, em vez de substituí-lo. Se os caracteres adicionais seguem a seqüência, o comportamento depende da implementação da biblioteca: algumas implementações podem ignorar caracteres adicionais, de modo que, por exemplo, um t adicional (às vezes usado para indicar explicitamente um arquivo de texto) é aceito. Em algumas implementações de biblioteca, abrir ou criar um arquivo de texto com modo de atualização pode tratar o fluxo em vez disso como um arquivo binário. Os arquivos de texto são arquivos que contêm sequências de linhas de texto. Dependendo do ambiente onde o aplicativo é executado, pode ocorrer alguma conversão de caracteres especiais nas operações de saída de entrada no modo de texto para adaptá-las a um formato de arquivo de texto específico do sistema. Embora em alguns ambientes não ocorram conversões, tanto os arquivos de texto quanto os arquivos binários são tratados da mesma maneira, usando o modo apropriado melhora a portabilidade. Para os arquivos abertos para atualização (aqueles que incluem um sinal), em que as operações de entrada e saída são permitidas, o fluxo deve ser descarregado (fflush) ou reposicionado (fseek. Fsetpos. Rewind) antes de uma operação de leitura que segue uma operação de escrita. O fluxo deve ser reposicionado (fseek. Fsetpos. Rebobinar) antes de uma operação de escrita que segue uma operação de leitura (sempre que essa operação não atingiu o final do arquivo). Valor de retorno Se o arquivo for aberto com êxito, a função retorna um ponteiro para um objeto FILE que pode ser usado para identificar o fluxo em operações futuras. Caso contrário, um ponteiro nulo é retornado. Na maioria das implementações da biblioteca, a variável errno também está configurada para um código de erro específico do sistema em failure. fopen, wfopen Os arquivos abertos para gravação no modo Unicode possuem uma BOM escrita automaticamente. Se o modo for um, ccsltencodinggt, fopen primeiro tenta abrir o arquivo usando o acesso de leitura e gravação. Se isso for bem-sucedido, a função lê a lista de materiais para determinar a codificação do arquivo se isso falhar, a função usa a codificação padrão para o arquivo. Em ambos os casos, fopen reabrirá o arquivo usando o acesso somente de gravação. (Isso aplica-se apenas a um modo, não a um modo.) Mapeamentos de rotina de texto genérico UNICODE amplificador MBCS não definido O modo de seqüência de caracteres especifica o tipo de acesso solicitado para o arquivo, da seguinte forma. R Abre para ler. Se o arquivo não existir ou não puder ser encontrado, a chamada fopen falhará. W Abre um arquivo vazio para escrever. Se o arquivo dado existir, seu conteúdo será destruído. A Abre para escrever no final do arquivo (anexar) sem remover o marcador de fim de arquivo (EOF) antes que novos dados sejam gravados no arquivo. Cria o arquivo se ele não existir. R Abre para ler e escrever. O arquivo deve existir. W Abre um arquivo vazio para leitura e escrita. Se o arquivo existir, seu conteúdo será destruído. A Abre para leitura e adição. A operação de anexação inclui a remoção do marcador EOF antes de novos dados serem gravados no arquivo. O marcador EOF não é restaurado após a conclusão da escrita. Cria o arquivo se ele não existir. Quando um arquivo é aberto usando o tipo de acesso ou o tipo de acesso, todas as operações de gravação ocorrem no final do arquivo. O ponteiro do arquivo pode ser reposicionado usando fseek ou rebobinar. Mas é sempre movido de volta ao final do arquivo antes que qualquer operação de gravação seja executada. Portanto, os dados existentes não podem ser substituídos. O modo a não remove o marcador EOF antes de acrescentar ao arquivo. Após a ocorrência, o comando do MS-DOS TYPE mostra apenas dados até o marcador EOF original e nenhum dos dados anexados ao arquivo. Antes de acrescentar ao arquivo, o modo a remove o marcador EOF. Após anexar, o comando MS-DOS TYPE mostra todos os dados no arquivo. O modo a é necessário para anexar a um arquivo de fluxo que é encerrado com o marcador CTRLZ EOF. Quando o r. W. Ou um tipo de acesso é especificado, tanto a leitura como a escrita estão habilitadas (o arquivo está aberto para atualização). No entanto, quando você muda de leitura para escrita, a operação de entrada deve encontrar um marcador EOF. Se não houver EOF, você deve usar uma chamada intermediária para uma função de posicionamento de arquivos. As funções de posicionamento de arquivos são fsetpos. Fseek. E rebobinar. Quando você muda de escrita para leitura, você deve usar uma chamada interativa para fflush ou para uma função de posicionamento de arquivo. Além dos valores anteriores, os seguintes caracteres podem ser anexados ao modo para especificar o modo de tradução para os caracteres da nova linha. T Abrir no modo de texto (traduzido). Neste modo, a CTRLZ é interpretada como um caractere EOF na entrada. Nos arquivos que são abertos para leitura escrita usando um. Fopen verifica uma CTRLZ no final do arquivo e remove-a, se for possível. Isso é feito porque usar fseek e ftell para mover dentro de um arquivo que termina com CTRLZ pode causar fseek para se comportar incorretamente perto do final do arquivo. No modo de texto, as combinações de retorno de retorno de carro são convertidas em alimentações de linha únicas na entrada, e os caracteres de alimentação de linha são traduzidos para as combinações de retorno de retorno de carro na saída. Quando uma função Unicode-fluxo-IO funciona no modo de texto (o padrão), o fluxo de origem ou de destino é assumido como uma seqüência de caracteres multibyte. Portanto, as funções de entrada de fluxo Unicode convertem caracteres de multibyte para caracteres largos (como se por uma chamada para a função mbtowc). Pelo mesmo motivo, as funções de saída de fluxo Unicode convertem caracteres largos em caracteres multibyte (como se fosse por uma chamada para a função wctomb). B Abrir em traduções em modo binário (não traduzido) envolvendo caracteres de retorno de transporte e de saída de linha são suprimidas. Se t ou b não for dado no modo. O modo de conversão padrão é definido pelo fmode variável global. Se t ou b é prefixado para o argumento, a função falha e retorna NULL. Para obter mais informações sobre como usar os modos de texto e binário em Unicode e multibyte stream-IO, consulte Arquivo de modo de texto e binário IO e Unicode Stream IO em modos de texto e binário. C Habilite o sinalizador de confirmação para o nome do arquivo associado para que o conteúdo do buffer do arquivo seja gravado diretamente no disco se o fflush ou flushall for chamado. N Redefina o sinalizador de confirmação para o nome do arquivo associado para não confirmar. Este é o padrão. Ele também substitui o sinalizador de compromisso global se você vincular seu programa com COMMODE. OBJ. O padrão de flag global commit is no-commit a menos que você associe explicitamente seu programa com COMMODE. OBJ (veja Opções de Link). N Especifica que o arquivo não é herdado por processos filho. S Especifica que o cache é otimizado para, mas não restrito ao acesso seqüencial do disco. R Especifica que o cache é otimizado para o acesso aleatório a partir do disco, mas não está restrito a ele. T Especifica um arquivo como temporário. Se possível, não é descarregado no disco. D Especifica um arquivo como temporário. Ele é excluído quando o último ponteiro do arquivo está fechado. CcsENCODING Especifica o conjunto de caracteres codificados para usar (UTF-8. UTF-16LE ou UNICODE) para este arquivo. Deixe não especificado se desejar codificação ANSI. Os caracteres válidos para a seqüência de modo que é usado em fopen e fdopen correspondem a argumentos de argumento que são usados ​​em open e sopen. do seguinte modo. Caracteres na cadeia de modo Equivalente do valor de exposição para sopen aberto

No comments:

Post a Comment