今天看源碼,有個TEMP_FAILURE_RETRY宏定義一時沒看明白,現在想想有點好玩,原來是換個馬甲就不認識了哈哈哈哈
/* 源碼 */
#define TEMP_FAILURE_RETRY(expression) \
(__extension__\
({ long int __result;\
do __result = (long int)(expression);\
while(__result == -1L&& errno == EINTR);\
__result;})\
/* 這個時候我沒看明白do __result 這是在幹啥,do是個類型嗎,其實加個括號,就明白了。是最基礎的do... while(0)的用法,簡寫了而已 */
/* 修改下加個大括號,更清楚了 */
#define TEMP_FAILURE_RETRY(expression) \
(__extension__\
({ long int __result;\
do \
{ __result = (long int)(expression);}\
while(__result == -1L&& errno == EINTR);\
__result;})\