Source: CSDN Wang Wensong transferred from Linux commune
Exit () and _exit () functions
Function description
The create process uses the fork () function, the execution process uses the EXEC function family, and the terminate process uses the exit () and _exit () functions. When the process executes to the exit () or _exit () function, the process unconditionally stops all remaining operations, clears the various data structures, and terminates the operation of the process. However, the two functions are still different, and call procedure 1 as follows:
As can be seen from Figure 1, the _exit () function is to directly stop the process from running, clear its used memory space, and clear its various data structures in the kernel, while the exit () function makes some wrappers on these bases, adding several operations before exiting. The most important difference between the exit () function and the _exit () function is that the exit () function checks which files the process has opened before terminating the current process, and writes the contents of the file buffer back to the file, which is the "clean I/O buffer" item in Figure 1.
In the standard library of Linux, there is an operation called buffered I/O (buffered I/O), characterized by a buffer in memory for each open file.
Each time a file is read, a number of records will be read sequentially, so that the next time you read the file can be read directly from the memory buffer, also, each time you write a file, it is only written in memory buffer, and so on to meet certain conditions (such as reaching a certain number or encounter a certain character, etc., the most typical is our vim used w command), and then write the contents of the buffer once to the file.
This technique greatly increases the speed of file reading and writing, but it also brings some problems to our programming. For example, some data you think have been written to the file, in fact, because it does not meet the specific conditions, they are only saved in the buffer, then use the _exit () function directly to shut down the process, the data in the buffer is lost. Therefore, if you want to ensure the integrity of the data, it is best to use the exit () function.
function syntax
The following table lists the syntax points for the exit () and _exit () functions:
Basic experiments
The following two basic experiment 1 compared the exit () and _exit () functions. Since the printf () function uses buffered I/O, the function automatically reads the record from the buffer when it encounters a "\ n" line break, and the following two basic experiments are compared using this property. The following is the code for Experiment 1:
Execution results such as
As you can see from the output, when you call the exit () function, the records in the buffer can also be output normally.
The code for Experiment 2 is as follows:
Execution results such as:
As you can see from the final result, calling the _exit () function does not output the record in the buffer.
If you add a carriage return to the second code in the Code in Experiment 2, the result will be different. Try it yourself, huh!
Linux multi-task programming Four: Exit () function and its basic experiment (GO)