×

How to create a binary file in C?

Creating a binary file in C language is very simple, requiring only some specific functions to be implemented. There are also other binary modes: read, and write, which will be discussed further in this article.

Binary files match arrays of structures extremely closely, with the difference that the structures are stored in a disc file rather than an array in memory. Since they are stored on a disc, you may build extensive collections of the structures in a binary file. Additionally, they are constant and readily available. The slowness caused by disc access time is a significant drawback.

What is a binary file?

A binary file is a type of file with a specific format known as binary, consisting of a series of bytes that are sequential and each eight bits long. The information needs to be interpreted by a software program or hardware processor that knows how it is formatted and how to read the data in advance.

Many different kinds of file that can be stored as binary files are executables, libraries, images, databases, files, and others. The point to be noted here is that it requires a specialized software program or hardware processor that is capable of reading the file's data. Only then can the binary content's instructions be correctly decoded and processed.

Typically, binary files and text files are the two types of electronic files. Since text files are composed of sequences of bytes like all other electronic files. The two, however, are widely considered to belong to different types.

Importance

  • When a program is stopped, all of the data is lost. If you store your data in a file, it will be retained even if the program is terminated.
  • If there are many of them, entering all the data will take a while. However, using a few C commands, you can easily retrieve the data if you have a file with all the information in it.
  • You may quickly move your data from one machine to another without making any changes. The complete set of data is lost when a program is stopped.
  • Binary data allows for significantly faster input and output. It takes some time to convert a 32-bit number to characters. Not a lot of time, but the total conversion time increases if a file (such as an image file) has millions of numbers. If data were kept in character form, computer games would bog down.
  • A binary file often has a considerably smaller file size than a text file with the same amount of data. This is crucial for audio, video, and image data. Small files take up less storage, can be transferred more quickly, and are processed faster. Since there are lesser bytes to share, I/O with smaller files is also quicker.
  • Certain types of data are difficult to represent as characters. For instance, the machine language of an executable file or the bytecodes of a file. Although you would not typically consider this to be data, it certainly is.
  • Additionally, there is no need to make the individual data samples human-readable because humans hardly ever analyze them. Humans, for instance, view the overall image in a GIF file and are not very interested in viewing the individual pixels as numbers. A programmer or scientist may occasionally need to perform this for scientific or debugging purposes.

Difference between text files and binary files

In binary files, a structure's contents are always editable. Any structure in the file can be accessed immediately, offering random access similar to that of an array.

The file-of-structures approach is very well supported in C. You can read, write to, or seek to any structure in the file after it has been opened. The idea of a file pointer is supported by this file concept. The pointer points to record 0 when the file is initially opened. Any read operation advances the pointer down one structure and reads the structure that is presently pointing to. Any write operation shifts the pointer down one structure and writes to the structure that is currently being referenced to. The pointer is moved to the specified record by seeking.

Because a binary image of the record is stored directly from memory to disc, binary files typically have faster read and write times than text files.

A text file is meant to be readable and understandable by humans. This used to mean good old ASCII but now includes other human-language character sets as well. It even includes things like HTML or XML, which are often human-readable by a very generous definition. You can still open them in a text editor, they'll display sensibly, and you can see something reasonably meaningful. Binary is anything else. All files are ultimately stored in binary form.

There's actually a particular context in which "text" and "binary" actually mean something similar and are distinct from anything else. A compiled program, as distinct from its source code or data files, is called a binary. If you use the right tools to peek inside a binary, you'll find that one of the segments is called "text", meaning that it's the main piece of executable code - not libraries, data, etc. This same terminology repeats inside the kernel, which uses this information to load the various pieces of the program into memory. In this linker/loader context, "text" is part of a "binary", and "binary" refers to a specific kind of file.

How do they work?

When it comes to files, binary has two widely used definitions.

1. The file is executable.

2. It cannot be read by humans

For (1), the executable likely has a particular format that any operating system "loader" mechanism can understand. In order to launch the program, the OS loader must first read it from the disc, allocate and copy the necessary bytes to memory, and then spawn a process. Additionally, libraries may need to be loaded dynamically.

For (2), those bytes' meaning was determined by someone somewhere. It might be as complex as an official standard like MP3 or as simple as a coder sending a few bytes to the file, and only by reading the code can it be understood.

In binary file, there are 4 operations

1. Create a file

2. Open an already existing file

3. Closing a file

4. Reading information from a file

5. Writing information to a file

Before moving on to binary files creation, there are some file modes that has to be known to work with them.

rb: A binary file is opened in read mode

wb: A binary file is opened in write mode

ab: A binary file is opened in append mode.

rb+: A binary file is opened in read-write mode.

wb+: A binary file is opened in read-write mode.

ab+: A binary file is opened in read-write mode.

NOTE: It's important to know that  fread and fwrite functions take four parameters as input:

  • A memory address
  • Number of bytes to read
  • Number of blocks
  • A file variable

Program to create a binary file in C

#include<stdio.h>
int main()
{
    /* Create a new file */
    int a = 5;
    FILE *fp = fopen ("myfile.bin", "wb");
    if (fp == NULL)
      return -1;
    fwrite (&a, sizeof (a), 1, fp);
    fclose (fp);


    return 0;
}

Program to read a binary file in C

#include <stdio.h>
#include <ctype.h>


int main() {
    FILE *fp;
    struct marks {
        char name[50];
        int age;
        float percentage;
    } m;
    fp = fopen("myfile.bin", "rb");
    if (fp == NULL) {
        puts("Couldn’t able to open this file.");
        return 1;
    }
    while (fread(&m, sizeof(m), 1, fp) == 1) {
        printf("\n%s \t %d \t $%.2f\n", m.name, m.age, m.percentage);
    }
    fclose(fp);
    return 0;
}

Program to write a binary file in C

#include <stdio.h>


int main()
{
    FILE *fp;
    struct marks {
        char name[50];
        int age;
        float percentage;
    } m;
     fp = fopen("myfile.bin", "wb");
    if (fp == NULL)
    {
        puts("Couldn’t able to open this file.");.");
        return 1;
    }
   
        m.name=”Varshith”;
        m.age=19;
        m.percentage=98.9;
        fwrite(&m, sizeof(m), 1, fp);
    fclose(fp);
    return 0;
}  

Some problems with the binary files

A software can check for valid input values if the expected range of values for the data is known. Sometimes, additional information about the data can be used to prevent it. However, if not, there is typically no way to check. It's common for bytes written in one format to be wrongly read in by another. You must confirm that the software and the data file are compatible.

This is a typical programming issue. Some files dated back many years and were produced using ill-documented software on outdated systems. It frequently takes some hard work to figure out how to understand them.

A file usually has a header that describes its contents. For instance, picture files frequently use this. When reading a file, a program examines the header to make sure it is what is expected. It is typical for the header to contain extra details like the time it was made and the software version that created it, among other things.

Also, knowing the header's format is now necessary, which could provide another issue. Many file headers begin with a few bytes of code that describe the format that the file's remaining bytes will take. GIF picture files, etc.

Conclusion

Up to this point, we have discussed about binary files, their importance, the difference between text and binary files, their usage and how to create a binary file, how to read a binary file, how to write to a binary file and various other modes.


Related Topics

strtok() and strtok_r() functions in C with examples

strtok() and strtok_r() functions in C with examples C offer various strtok() and strtok r() methods for a string to be separated by a certain delimiter. Dividing a string is a...

2 minutes read.

If else Programs in C Programming

If else Programs in C programming The if-else statement in C is based on some particular conditions to perform the operations. If and only if the given condition is valid, the operations listed in...

4 minutes read.

Beep() function in C

Introduction: Beep is a function which is used in C programming language. The beep function uses to make a beep sound. In the C language, when we want to generate...

3 minutes read.

clrscr in C

clrscr function in C clrscr stands for: clr = clear scr= screen When the clrscr() function is called in a program everything currently displayed in the console(output of previous programs, output of current program,...

3 minutes read.

C Program for Mean and Median of an Unsorted Array

In this tutorial, we will look at how to determine the mean and median of a given unsorted array. To determine the Mean: To get the average, mean is determined. The formula...

2 minutes read.

LCM of two numbers in C

LCM is a mathematical term which stands for Least Common Multiple. LCM of any two numbers is the smallest positive value(number) which is evenly divisible by the two given numbers. Consider...

4 minutes read.

Pointers in C

Pointers in C: In the C programming language, a pointer is a pointer variable that points to the address of the other variable. It also stores the address of the...

4 minutes read.

fork() in C

Introduction To create a new function in the system, there is a need for a system call, i.e. fork system call. It is also known as the child process. These child...

2 minutes read.

Assert() Function in C

Assert (): In C, the statements are executed with the exit statement. In C language declare, and it tests the condition parameters. If the statement executed will be false, it shows...

4 minutes read.

C Program to find the Roots of a Quadratic Equation

What is Quadratic Equation: Equations of degree 2 in polynomial form are called quadratic equations. A, B, and C are the coefficient variables in the equation, which is written as ax2...

3 minutes read.

Sum of N numbers in C using For loop

Before we move on the program of sum of N numbers, first we have to know about the For Loop statement. The syntax of ‘for’ loop in C programming language is...

3 minutes read.

C Token

C Token and Keyword The C tokens are the basic buildings blocks in C language which are constructed together to write a C program. Each and every smallest individual unit in the C program is...

2 minutes read.

Infinite loop in C

Definition of infinite loop The infinite loop is a loop that does not get dismissed because of its looping construct. A continuous output or no output are the two possible outcomes...

3 minutes read.

Branching Statements in C

What is branching in c? Branching gets its name from the fact that the computer can select which branch to follow.Programs written in the C language execute statements one after the...

6 minutes read.

Two-Dimensional array in C

What is an Array? The collection of a fixed number of elements of homogeneous data types that are stored in contiguous locations in the memory is known as an array. Only...

6 minutes read.

Why C is a middle level language

The C programming language is generally referred to as a high level language but we glance through the backend of C, i.e the working of C as a programming language...

4 minutes read.

C Program of Fencing the Ground

The college's ground is rectangular. Fencing the ground the management makes the decision to construct a fence around the ground. They planned to wrap a thick rope around the ground...

1 minute read.

Difference between while and for loop in C

While Loop The syntax that can be used for the ‘while’ loop in the C programming language is mentioned below: while (test expression or termination condition)  {   // the main body of the...

6 minutes read.

Multiplication table program in C using For loop

Before we move on the program of multiplication table of any natural number, first we have to know about the For loop statement. The syntax of ‘for’ loop in C programming...

3 minutes read.

Heap Sort in C

In this tutorial, we will learn about heap sorting in C language, but before going to Heap sort, we have to know the concept of Complete Binary Tree. What is Complete...

8 minutes read.