vickycq 写了:科学之子 写了:$ grep INT_MAX $(grep -l 1000000 $(grep -l -r adjtime) |grep \\\.c$)
sysdeps/unix/sysv/linux/adjtime.c:#define MAX_SEC (INT_MAX / 1000000L - 2)
这样搜不是事后诸葛亮么,一开始咱是不知道这些关键词的
下载源代码后:
grep -Ri 'einval' ./
发现很多,
grep -Ri 'einval' ./ | grep adjtime
./sysdeps/unix/sysv/linux/adjtime.c: return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL);
打开 ./sysdeps/unix/sysv/linux/adjtime.c,在 EINVAL 的前一行发现 MIN_SEC, MAX_SEC
再找 MIN_SEC, MAX_SEC 定义即可(实际上不需要,打开文件第一眼就看到了)
搜索时使用
viewtopic.php?f=165&t=480008 是更好的办法
代码: 全选
grep -Ri 'einval' ./ | grep adjtime
./sysdeps/unix/sysv/linux/adjtime.c: return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL);
奇怪,我这里的执行结果是:
代码: 全选
$ grep -Ri 'einval' ./ | grep adjtime
./sysdeps/unix/sysv/linux/adjtime.c: __set_errno (EINVAL);
./sysdeps/unix/sysv/linux/adjtime.c: if (itv && errno == EINVAL && tntx.modes == ADJ_OFFSET_SS_READ)
受教了,当时完全忽略了"EINVAL"是个系统定义的宏
这样搜不是事后诸葛亮么,一开始咱是不知道这些关键词的
感觉不完全是事后诸葛亮,man中可以观察到"1000000",INT_MAX,同时猜测实现中应该还包含"adjtime"
只是当时搜索经验不足,加上英文水平也不够,没能敏锐发现这些细节