Ferramentas do usuário

Ferramentas do site


write

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.


write [2023/09/12 16:14] (atual) – criada - edição externa 127.0.0.1
Linha 1: Linha 1:
 +====== Função write ======
 +
 +Sintaxe:
 +
 +''[[tipos_dados|ssize_t]] write ([[tipos_dados|int]] iFileDescriptor, [[const]] [[tipos_dados|void]] * buffer, [[tipos_dados|size_t]] nbyte);''
 +
 +----
 +
 +
 +A função **write** grava no arquivo indicado pelo descritor as informações obtidas do endereço fornecido. Os dados serão gravados a partir da posição atual do arquivo. Caso a opção **O_APPEND** tenha sido especificada na abertura, a posição atual do arquivo será antes atualizada com o valor do tamanho do arquivo. Após a gravação a posição atual do arquivo será somada da quantidade de bytes gravados no arquivo.
 +
 +Deve-se informar a quantidade de bytes a ser gravado no arquivo. Caso ocorra algum erro, a função irá retornar -1, e a descrição do erro estará disponível na variável [[errno]]. Caso não ocorra erro a função irá retornar a quantidade de bytes gravados no arquivo, que deve ser igual à quantidade informada como parâmetro.
 +
 +Veja o exemplo:
 +
 +<code c>
 +#include <stdio.h>
 +#include <stdlib.h>
 +#include <errno.h>
 +#include <fcntl.h>
 +#include <string.h>
 +
 +int main (int argc, char  *argv[])
 +{
 +   int iFileDescriptor;
 +   ssize_t iQtdeWrite;
 +   char aBuffer[100];
 +   if( argc < 2 )
 +   {
 +      fprintf(stderr, "Obrigatório informar os nomes dos arquivos\n");
 +      exit(1);
 +   }
 +
 +   /* abrindo o arquivo, caso o arquivo exista sera truncado */
 +   iFileDescriptor = open (argv[1], O_WRONLY | O_CREAT | O_TRUNC, 0755);
 +   if (iFileDescriptor < 0)
 +   {
 +     perror (argv[0]);
 +     exit (errno);
 +   }
 +
 +   printf ("Arquivo '%s' aberto\n", argv[1]);
 +   strcpy (aBuffer,"Esta linha foi gravada pelo programa.");
 +
 +   /* Gravando um texto no arquivo. Deve-se sempre passar o endereço de memória da variável cujo conteúdo deseja-se para gravar. */
 +   iQtdeWrite = write (iFileDescriptor, &aBuffer, strlen (aBuffer));
 +
 +   if (iQtdeWrite < strlen (aBuffer)) /* Sempre deve ser verificado se todos os dados foram gravados. Basta comparar a quantidade 
 +                                         de bytes gravados com o tamanho da variável que deseja-se gravar. */
 +   {
 +      perror (argv[0]);
 +      exit (errno);
 +   }
 +   printf("\nForam gravado %d bytes no arquivo '%s'\n", iQtdeWrite, argv[1]);
 +
 +   close(iFileDescriptor);
 +   return 0;
 +}
 +</code>
 +
 + --- //[[marcos@laureano.eti.br|Marcos Laureano]] 2008/04/25 06:48//
  
write.txt · Última modificação: 2023/09/12 16:14 por 127.0.0.1