I created a simpe program in C and I want to hear your opinions.

The program reads a .txt file that contains lines of numbers. The first one has one number N and the second one has N numbers as the first line says. 

The N numbers is 1 <= N <= 1.000.000

The program read the N numbers in an array and make the following procedure. Read the number one by one backwards in the array and check to find the max value. Every time a new max value is found the int **total** increases by one. In the end we write the total value in an output file.

Is my code well written?

    #include <stdio.h>
    #include <stdlib.h>
    
    /*---------------------*/
    /* defined constants   */
    /* for restriction     */
    /*---------------------*/
    #define MIN 1
    #define MAX 1000000
    
    /*---------------------*/
    /* function prototypes */
    /*---------------------*/
    int main(void);
    FILE *read_input(char *filename_r);
    int count_children(FILE *input);
    int pass_heights(FILE *input, int *children,const unsigned int size);
    int chck_tall(const int *children,const unsigned int size);
    void write_output(const unsigned short total,char *filename_w);
    
    
    /*----------------------------------*/
    /* start of program - Main Function */
    /*----------------------------------*/
    int main(void) {
    
    	char *filename_r = "xxx.in";
    	char *filename_w = "xxx.out";
    
    	FILE *input = read_input(filename_r);
    
    	unsigned int size = count_children(input);
    
    	int *children = malloc(size * sizeof(unsigned short));
    	if (children==NULL)
    	exit(1); //General application error
    
    	pass_heights(input, children, size);
    
    	fclose(input);
    
    	unsigned short total = chck_tall(children, size);
    
    	free(children);
    
    	write_output(total,filename_w);
    
    	return 0;
    }
    
    FILE *read_input(char *filename_r) {
    
    	FILE *input = fopen(filename_r, "r");
    
    	if(input == NULL)
    	exit(66); //EXIT_NOINPUT 'cannot open input'
    
    	return input;
    }
    
    int count_children(FILE *input) {
    
    	unsigned int count = 0;
    	fscanf(input, "%d",&count);
    
    	if(count > MAX || count < MIN)
    	exit(1); //General application error
    
    	return count;
    }
    
    int pass_heights(FILE *input, int *children,const unsigned int size) {
    
    	for(register int i = 0; i < size; i++)
    	fscanf(input, "%d",&children[i]);
    
    	return *children;
    }
    
    int chck_tall(const int *children,const unsigned int size) {
    
    	unsigned short total = 0;
    	unsigned short tmp_max = 0;
    	for(register int i = size - 1; i >= 0; i--)
    	{
    		if(children[i] > tmp_max) {
    			tmp_max = children[i];
    			total++;
    		}
    	}
    	return total;
    }
    
    
    void write_output(const unsigned short total,char *filename_w) {
    
    	FILE *output = fopen(filename_w, "w");
    
    	if(output == NULL)
        exit(74); //EXIT_IOERR 'input/output error'
    
    	fprintf(output, "%d\n", total);
    	fclose(output);
    }