Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C: can't write data on file

Tags:

c

linux

i want to open a file, write some data on it so i have to use (Fopen) " i can't use open because i need fopen in some other things "

now if i want to write on the file using fwrite it just don't i don't know why this is what i referred to in my code #option1, but if i get the file descriptor and use normal write method everything works fine see #option 2 below.

anyone can help me to make fwrite works ?

    char file_data[256] // has some values 
    int file_size = strlen(file_data);
    FILE *file;
    file = fopen(MY_FILE_NAME, "w+");


    if(!file){//edited 
           return false;
    }


    #option 1//this is not working 
    fwrite(file_data,1,file_size,file);
    #end of option 1

    #option 2//this works 
    int fd = fileno(file);
    int x = write(fd,file_data,file_size);//
    #end of option 1

EDIT

my file_data is something like this

  1. 4 bytes is reserved for an integer (required)
  2. 200 bytes is reserved for a string (optional)
like image 346
trrrrrrm Avatar asked Oct 27 '25 02:10

trrrrrrm


2 Answers

buffered IO operations use a buffer that is managed by the C lib. Your "problem" is that fwrite is buffered meaning that in order to write to the file you most likely need to flush it with fflush() or just close the file.

like image 65
Milan Avatar answered Oct 28 '25 18:10

Milan


First of all:

if(!file < 0 ){
       return false;
}

file is either NULL (on failure) or not (on success) - there's no point in testing it against 0 as it's a pointer (therefore, unsigned).

Your fwrite call seems OK, but you should make sure that the amount you're trying to write is correct (is there a null-terminated string inside file_data?).

Another problem you may be facing is that you don't close or flush the file - this may cause some data to remain in the file-buffer and not be written to the disk.

like image 23
adamk Avatar answered Oct 28 '25 20:10

adamk



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!