Improving C file reading function
The two functions do not do the same thing so comparing their efficiency is not sensible.  A few comments on the code though (adding to those of @mjfgates)

first read_data_from_file:


path should be const
imgFD should be comapred &lt;0 not &lt;=0
check the return value of fstat instead of checking whether fsz is less than 0.
use perror to print failure reason after detecting open failure
fsz == 0 is valid and should return an empty buffer (ie return data and set *fsz1 to zero)
don't cast the return value of malloc
sizeof(char) is 1 by definition
check whether malloc succeeded.
you allocated fsz+1 bytes, presumably allowing for a terminator but didn't add one (\0)
check whether read succeeded.
check whether close succeeded (if pedantic).
why does data get brackets in return (data) and NULL not in return NULL?  Prefer the latter (no brackets).


second read_data_from_file:


pts should be char * or else you will get a compiler warning.  Are warnings enabled for you?
keywords (if, while, etc) preferred with a space - ie. if (...) instead of if(...)
if you are reading a normal file, the loop is not required. Just one read, as in the first version.
if you are reading something other than a file, then a loop is needed, but your loop is incorrect.  If the read call gave some data, you will get n = number read, if it got to end of file, you will get 0, if there was an error or if reading was interrupted before any daat was received you will get an error (-1) and errno will be set.  In the latter case you must work out whether there was an error or whether the call was interrupted  in which case you can loop.
if count is bigger than the actual file size, your loop never exits.
status is misnamed - it holds the number of bytes read so far.


main:


return EXIT_FAILURE or EXIT_SUCCESS
ok, it is a file you are reading so the loop in the second read_data_from_file is not necessary.
as before, don't cast malloc return and sizeof(char) is 1 by definition