×

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

Nested Loops in C Programming Examples

A nested loop is generally used when we want to run a loop statement inside another loop statement. This kind of loop is also known as a “loop inside the...

6 minutes read.

Limitations of Inline Function in C

The compiler is unable to conduct inlining in two instances. It just accepts the inline definitions and produces space for the function in the same way it does for a...

3 minutes read.

Difference between Array and List in C

C# Array vs List is where the abstraction and implementation of human computing meet.  Arrays are incredibly related to the hardware concept of contiguous and contiguous memory, where each part is...

3 minutes read.

Int in C

The keyword int in C programming stands for integer and it is a data type which is used for variable declarations or declaration of functions of different types. Similar to...

4 minutes read.

Built-in functions in C

The function is a set of instructions and statements enclosed in the "{}" delimiter. In c, there are two types of functions. Pre-define functions/ Built-in functionsUser define function. Built-in functions in C:- These...

8 minutes read.

Character Set in C

Introduction Every language has some basic elements which are used to represent information. The English language includes alphabets which together shape a sentence, after which the sentences are used to shape...

3 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.

If Statement in C

Decision Control Statements We frequently desire one set of instructions to be carried out in one circumstance while another set of instructions to be carried out in a completely different circumstance....

3 minutes read.

Bank management system in C

This is a mini project that is constructed completely using the C language. The bank management system is a beginner friendly project. To construct this user only needs to know...

12 minutes read.

#error #pragma in C

#error, #pragma in C #error, also known as the error directive in the C language. It will not allow you to make any compilation fail and immediately issues a statement which...

4 minutes read.

Calloc in C

The calloc() is a library function in C which is used for memory allocation. The calloc() function dynamically allocates multiple blocks of memory to complex data structures. This includes data structures...

3 minutes read.

Structure Pointer in C

Structure Pointer in C In the C programming language, a structure pointer is defined as a pointer that points to the memory block address that stores a structure. Like C standard...

4 minutes read.

One Dimensional Array in C

One Dimensional Array in C: In the C programming language, an array is defined as a collection of one or more values of the same type. Every value present in...

4 minutes read.

Typecast vs. typedef in C

Typecast vs. typedef in C Typecast In the C programming language, converting the data type from one form to another is known as type casting or the type conversion. It is a...

5 minutes read.

Write a program that produces different results in C and C++

In this tutorial, we'll explore several programs that, depending on whether they are developed using C or C++ compilers, will produce varying outputs. There are numerous similar programs, but we will just...

2 minutes read.

Macros in C

In the C programming language, the macro is defined as a segment of the code replaced by the macro defined value at the beginning. ‘#define’ is the directive that defines...

3 minutes read.

C printf and Scanf

Input-Output functions in C Programming In C Language, the printf() and scanf() are inbuilt library functions that used for input and output. It is defined in the header file“<stdio.h>”. printf() Function: In C...

2 minutes read.

Union Program in C

 How should a union be defined?  In C programming, a Union is a method used to organize different data types into groups in the same way that Structures are used. We...

4 minutes read.

Builtin functions of GCC compiler

Certain built-in functions are present in the GCC compiler. These features are as follows: Function_ built in_popcount (x) The number of 1s in data of the integer type can be counted using...

3 minutes read.

How to install a C compiler in windows 10-64bit

Many C compilers can be installed on your pc. The most downloaded compilers include GCC, Turbo C++, Visual Studio, etc. This article includes the installation of the Turbo C++ compiler in...

6 minutes read.