免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4467 | 回复: 10
打印 上一主题 下一主题

linux c 代码阅读的困难 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-09 12:26 |只看该作者 |倒序浏览
网上找了些linux 命令的源代码来看,结果发现很多宏搞不清楚,自己也不知道如何去跟踪看,还望各位兄弟朋友指点指点,下面是who命令部分代码,


#if HAVE_STRUCT_XTMP_UT_PID
# define UT_PID(U) ((U)->ut_pid)
# define PIDSTR_DECL_AND_INIT(Var, Utmp_ent) \
  char Var[INT_STRLEN_BOUND (Utmp_ent->ut_pid) + 1]; \
  sprintf (Var, "%d", (int) (Utmp_ent->ut_pid))
#else
# define UT_PID(U) 0
# define PIDSTR_DECL_AND_INIT(Var, Utmp_ent) \
  const char *Var = ""
#endif

#if HAVE_STRUCT_XTMP_UT_ID
# define UT_ID(U) ((U)->ut_id)
#else
  /* Of course, sizeof "whatever" is the size of a pointer (often 4),
     but that's ok, since the actual string has a length of only 2.  */
# define UT_ID(U) "??"
#endif

#define UT_TYPE_UNDEF 255

#if HAVE_STRUCT_XTMP_UT_TYPE
# define UT_TYPE(U) ((U)->ut_type)
#else
# define UT_TYPE(U) UT_TYPE_UNDEF
#endif

#define IS_USER_PROCESS(U)                        \
  (UT_USER (utmp_buf)[0]                        \
   && (UT_TYPE (utmp_buf) == USER_PROCESS        \
       || (UT_TYPE (utmp_buf) == UT_TYPE_UNDEF        \
           && UT_TIME_MEMBER (utmp_buf) != 0)))


先谢谢!

论坛徽章:
0
2 [报告]
发表于 2009-02-09 12:34 |只看该作者
把相关的头文件,Makefile都找出来看

论坛徽章:
0
3 [报告]
发表于 2009-02-09 13:04 |只看该作者

回复 #1 ggff112 的帖子

看一份源代码,不是从代码看代码,要从功能上去理解,从框架上看到细节。如果一开始揪住细节看,自然很难明白。而且要看懂某类源代码,比如linux下的应用程序,那么对linux系统本身要有点熟悉才好。上面的宏,其实很容易理解。比如
#if HAVE_STRUCT_XTMP_UT_PID
估计这个who源代码也许不只是给linux用,或者也不只是一个linux的版本用,所以有的系统会没有头文件xtmp_pid_pid这个结构,那么就要处理这种情况(xtmp是啥,就自己google一下)。至于#if内部的内容,就可以根据需要选择得看了。其他的几个都是类似的道理。

论坛徽章:
0
4 [报告]
发表于 2009-02-09 13:34 |只看该作者
装cscope吧~~

论坛徽章:
0
5 [报告]
发表于 2009-02-09 13:37 |只看该作者

论坛徽章:
0
6 [报告]
发表于 2009-02-09 13:44 |只看该作者
太感谢楼上的兄弟朋友了,让我学到不少,虽然前路漫漫,我将继续前行,有你们的帮助我走的更轻松,谢谢

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
7 [报告]
发表于 2009-02-09 16:01 |只看该作者
原帖由 ggff112 于 2009-2-9 13:44 发表
太感谢楼上的兄弟朋友了,让我学到不少,虽然前路漫漫,我将继续前行,有你们的帮助我走的更轻松,谢谢

有本书,叫做 Code Reading,专门讲如何读代码的,相当不错,建议看看:
http://www.spinellis.gr/codereading/

论坛徽章:
0
8 [报告]
发表于 2009-02-09 16:53 |只看该作者
see my blog, maybe not what u want.

论坛徽章:
0
9 [报告]
发表于 2009-02-09 17:14 |只看该作者
http://www.china-pub.com/37551
结合7楼的书,看这个。当初为了NetBSD我差点买一本

论坛徽章:
0
10 [报告]
发表于 2009-02-09 17:15 |只看该作者
grep -r
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP