Ir ao conteúdo
  • Cadastre-se
brxuser

Manipulação de arquivos (fopen, write,..) : linux gcc

Recommended Posts

Bom dia ae pessoal,

preciso fazer um programa que basicamente efetue entrada e saida de dados em arquivos, até ai tudo bem. porém só posso utilizar neste exercício chamadas de sistema. Apenas read e write.

A ideia do exercício é explorar a entrada e saida de dados am ambiente linux.

O problema e o seguinte, eu consigo utilizar o write normalmente para as escrever na entrada padrão (stdin) e também normalmente pra escrever na saida padrão (stdout), porém quando tento escrever em um arquivo que criei não funciona. A função fopen chega a criar o arquivo porém não escreve no mesmo, gostaria de saber onde esta meu erro, desde ja agradeço a ajuda,

segue um versão simplificada do código, não e necessário preocupação com o trecho em que o conteudo e carrado para a variavel buffer, já que o conteudo e carregado do buffer do teclado sem problemas.


#include <sys/types.h>
#include<stdio.h>
#include <unistd.h>

int main(){
char buffer[100];
(...) // neste trecho carrego conteudo existente no buffer do teclado

/* como o trecho acima nao apresenta problema para simplificar (caso alguem deseje testar) pode ser subistiruido por uma entada de dados com scanf mesmo.
- neste momento tenho o conteudo desejado na variavel buffer
*/

//
FILE * inp;
inp = fopen("entrada.txt","w");
/* ja testei outros modos w, inclusive ja setei permissão 666 para o arquivo criado, acretido ser algo relacionado porém não sei como contornar */
write(inp,buffer,100); // fprintf(inp,buffer,100); com funciona perfeitamente!
fclose(inp);
}

desde ja agradeço a atenção,

abraço ae galera...

:)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, sou novo em Programação, começei a menos de uma mes, nao sei se estou errado, nao nao custa nada tentar ajudar né.

Bom, no eu codigo, tenta usar o comando if.

if (imp = fopen("entrada.txt", "w");

e tambem, declara ai FILE *imp, sem o espaço entre o asterisco e imp, e declara ele no começo do codigo, la onde se declaram as variaveis.

outra opção pra tentar escrever no arquivo, tenta usar fprintf pra executar saida formatada no arquivo ok.

espero q eu possa ajudar. um abraço e ate mais valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tipo eu nunca usei write... Tente usar fprintf:

int fprintf ( FILE * stream, const char * format, ... );

fprintf (inp, "%s\n",buffer);

Acho que isso resolveria

Flws

:D

Editado por gandalfnho
Mensagem toda colorida

Compartilhar este post


Link para o post
Compartilhar em outros sites

opaa..

pessoal valeu os toques ai, mais nao posso utilizar neste caso nenhuma função própia do c, o exercício deve ser implementado usando apenas chamadas de sistema,

com fprintf o programa funciona perfeitamente..

valeu a ajuda aeee..

abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei como funciona essa função write, mas tenta fazer um for percorrendo o buffer e dando write em caractere por caractere...

Se achar a solução, posta ela pra gente...

{Edit}

Esse site vai te ajudar: http://www.cplusplus.com/reference/iostream/ostream/write.html

{Fim edit}

Abraços

Editado por fandre

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rapaz, você usa um ponteiro de arquivo(FILE*) pra receber um retorno de ponteiro de arquivo, ok. Mas write só escreve com base em descritores inteiros validos, não acha?

você deveria mudar o fopen() por open() ou create(), e mudar o FILE* pra int

Compartilhar este post


Link para o post
Compartilhar em outros sites

write só vai servir para imprimir no arquivo se você definir a saída padrão como sendo esse arquivo...

Afinal as únicas entradas de write são a string para impressão e a quantidade de caracteres que você quer imprimir...

E o local de escrita é a saída padrão, ou seja, monitor...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×