Salve, con un programma c (non da riga di comando) voglio creare un file di determinate dimensioni.

So creare file con open o fopen, ma come faccio per crearne uno di dimensioni prestabilite? ovvero sapendo di quanti byte deve essere grande.

chiesto 30 Nov '13, 20:21

lucalarocco's gravatar image

lucalarocco
70336

modificato 16 Feb '14, 21:30

enzotib's gravatar image

enzotib ♦♦
14.1k113187


Ecco un programma che fa proprio questo:

#include <stdlib.h>
#include <stdio.h>

#define SIZE   100
#define FNAME  "output.txt"

void error(const char *message) {
  perror(message);
  exit(EXIT_FAILURE);
  return;
}

int main() {

  FILE *fp = NULL;

  if ((fp = fopen(FNAME, "w"))    == NULL) error("fopen");
  if (fseek(fp, SIZE-1, SEEK_SET) != 0)    error("fseek");
  if (fwrite("", 1, 1, fp)        != 1)    error("fwrite");
  if (fclose(fp)                  != 0)    error("fclose");

  return 0;
}

Il programma sfrutta il fatto che posizionando il puntatore del file (con fseek) in un qualsiasi punto oltre la fine del file e scrivendo in quella posizione, automaticamente il file viene allungato a quella dimensione.

coll. permanente

ha risposto 01 Dec '13, 13:26

enzotib's gravatar image

enzotib ♦♦
14.1k113187

La tua risposta
abilita/disabilita anteprima

Segui questa domanda

Via email:

Una volta eseguito l'accesso potrai iscriverti a tutti gli aggiornamenti qui

Via RSS:

Risposte

Risposte e commenti

Basi di markdown

  • *corsivo* o __corsivo__
  • **grassetto** o __grassetto__
  • collegamento:[testo](http://url.com/ "titolo")
  • immagine?![alt testo](/path/img.jpg "titolo")
  • elenco numerato: 1. Foo 2. Bar
  • per aggiungere un'interruzione di riga, aggiungi due spazi a fine riga e premi «Invio»
  • è supportato anche semplice HTML

Tag:

×81
×22

domanda posta: 30 Nov '13, 20:21

domanda visualizzata: 2,209 volte

ultimo aggiornamento: 16 Feb '14, 21:30

Chiedi è un servizio di supporto gestito da Ubuntu-it. Contattaci!

powered by OSQAPostgreSQL database
Ubuntu e Canonical sono marchi registrati da Canonical Ltd.