i read in The Linux Programming Interface 29-2 Threads and errno the next :
On Linux, a thread-specific errno is achieved in a similar manner to most other UNIX implementations: errno is defined as a macro that expands into a function call returning a modifiable lvalue that is distinct for each thread.
and i wondered how can a function return a modifiable lvalue.