Mitro
Mitro

Reputation: 1260

File management in C?

I'm training with file management in C, I saw that there are plenty of ways to open a file with fopen using words as a,r,etc.. Everything ok, but I read also that if to that word I add b that become a binary file. What does it mean? Which are the differences with a normal file?

Upvotes: 1

Views: 374

Answers (5)

jam
jam

Reputation: 3688

Opening a file in text mode causes the C libraries to do some handling specific to text. For example, new lines are different between Windows and Unix/linux but you can simply write '\n' because C is handling that difference for you.

Opening a file in binary mode doesn't do any of this special handling, it just treats it as raw bytes. There's a bit of a longer explanation of this on the C FAQ

Note that this only matters on Windows; Unix/linux systems don't (need to) differentiate between text and binary modes, though you can include the 'b' flag without them complaining.

Upvotes: 7

Andreas Grapentin
Andreas Grapentin

Reputation: 5796

b is for working with binary files. However, this has no effect on POSIX compliant operating systems.

from the manpage of fopen:

   The mode string can also include the letter 'b' either as a last  char‐
   acter  or as a character between the characters in any of the two-char‐
   acter strings described above.  This is strictly for compatibility with
   C89  and has no effect; the 'b' is ignored on all POSIX conforming sys‐
   tems, including Linux.  (Other systems may treat text files and  binary
   files  differently, and adding the 'b' may be a good idea if you do I/O
   to a binary file and expect that your program may be ported to non-UNIX
   environments.)

Upvotes: 2

Alexey Frunze
Alexey Frunze

Reputation: 62048

If you open a regular file in the binary mode, you'll get all its data as-is and whatever you write into it, will appear in it.

OTOH, if you open a regular file in the text mode, things like ends of lines can get special treatment. For example, the sequence of bytes with values of 13 (CR or '\r') and 10 (LF or '\n') can get truncated to just one byte, 10, when reading or 10 can get expanded into 13 followed by 10 when writing. This treatment is platform-specific (read, compiler/OS-specific).

For text files, this is often unimportant. But if you apply the text mode to a non-text file, you risk data corruptions.

Also, reading and writing bytes at arbitrary offsets in files opened in the text mode isn't supported because of that special treatment.

Upvotes: 3

swpd
swpd

Reputation: 1151

There are two types of files: text files and binary files.

Binary files have two features that distinguish them from text files: You can jump instantly to any record in the file, which provides random access as in an array; and you can change the contents of a record anywhere in the file at any time. Binary files also usually have faster read and write times than text files, because a binary image of the record is stored directly from memory to disk (or vice versa). In a text file, everything has to be converted back and forth to text, and this takes time.

more info here

Upvotes: 2

Alex
Alex

Reputation: 10126

The difference is explained here

A binary file is a series of 1's and 0's. This is called machine language because microprocessors can interpret this by sending a signal for 1's or no signal for 0's. This is much more compact, but not readable by humans.

For this reason, text files are a string of binary signals designated to be displayed as more people-friendly characters which lend themselves to language much better than binary. ASCII is an example of one such designation. This reveals the truth of the matter: all files are binary on the lowest level.

But, binary lends itself to any application which does not have to be textually legible to us lowly humans =] Examples applications where binary is preferred are sound files, images, and compiled programs. The reason binary is preferred to text is that it is more efficient to have an image described in machine language than textually (which has to be translated to machine language anyway).

Upvotes: 2

Related Questions