brk() sets the end of the data segment to the value specified by
end_data_segment, when that value is reasonable, the system does have enough memory
and the process does not exceed its max data size (see
setrlimit(2)).
sbrk() increments the programs data space by
increment bytes.
sbrk() isnt a system call, it is just a C library wrapper.
Calling
sbrk() with an increment of 0 can be used to find the current
location of the program break.
The return value described above for
brk() is the behaviour provided by the glibc wrapper function for the Linux
brk() system call.
(On most other implementations, the return value from
brk() is the same.)
However,
the actual Linux system call returns the new program break on success.
On failure, the system call returns the current break
(thus for example, the call
brk(0) can be used to obtain the current break).
The glibc wrapper function does some work to provide the 0
and -1 return values described above.
On Linux,
sbrk() is implemented as a library function that uses the
brk() system call, and does some internal bookkeeping so that it can
return the old break value.