There are a few characters which can indicate a new line. The usual ones are these two:
"\n" or 0x0A (10 in decimal)
This character is called "Line Feed" (LF).
"\r" or 0x0D (13 in decimal)
This one is called "Carriage return" (CR)
Different Operating Systems handle newlines in a different way. Here is a short list of the most common ones:
DOS and Windows
They expect a newline to be the combination of two characters, namely "\r\n" (or 13 followed by 10).
Unix (and hence Linux as well)
Unix uses a single "\n" to indicate a new line.
Macs use a single "\r".
This difference gives rise to a number of problems. For example, a file created under Unix (so with newlines as a single LF) will not open correctly under Window's Notepad. Any Windows program that expects newlines to be CRLF will not work correctly with these files.
To unify things a bit, so that writing portable C/C++ programs is possible, file streams have both a "translated" and an "untranslated" mode. If you open a file in translated mode, the runtime library will convert a "\n" to the appropriate newline character(s). If the following program is compiled under Unix, the file will contain a single LF to indicate the newline. If it's compiled under windows, it will contain a CRLF.
So file streams are handled in a transparent way, provided of course that you only handle files compatible with your operating system. But many times you have to pass multi-line strings directly to some system functions.