Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1277893
  • 博文数量: 213
  • 博客积分: 7590
  • 博客等级: 少将
  • 技术积分: 2185
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-31 17:31
个人简介

热爱开源,热爱linux

文章分类

全部博文(213)

文章存档

2018年(4)

2017年(1)

2015年(1)

2014年(5)

2013年(2)

2012年(2)

2011年(21)

2010年(82)

2009年(72)

2008年(23)

分类: LINUX

2010-03-24 22:20:00

晚上在网上拷了一段程序,想看看运行结果,分析一下源代码,不想下载所得程序每行前面都有一个行号,程序不能运行,我就试着删除行号,可是程序太长,删的时候太麻烦,于是就写了一个perl脚本将其快速删除,现在将我的脚本贴出来,如有什么地方可以改进希望各位帮忙指出来,我的脚本如下:
 
 
  1#!/usr/bin/perl                                                      
  2 #文件名:deleteRowNum.pl
  3 #本脚本用来将源文件中每行的行号号去除,省去了手工删除行号的麻烦;
  4 #运行格式是:
  5 #  perl deleteRowNum.pl sourcefile targetfile
  6 #则在targetfile里面的内容就没了行号
  7
  8 open (FILE,"$ARGV[0]") || die "Cannot open file $ARGV[0]";
  9 open(OUTFILE,">>$ARGV[1]") || die "cannot create file $ARGV[1]";
 10 while( $line= ) {
 11       $line=~s/^(空格{0,}|\d)\d{0,}\.//g;
 12       print OUTFILE ("$line");
 13 }
 14 close (FILE);
 15 close (OUTFILE)

运行实例:有文件mem.c
   ...
  11. #include
  12. #include
  13. #include
  14. 
  15. MODULE_LICENSE("GPL");
  16. static int pid;
  17. static unsigned long va;
  18. 
  19. module_param(pid,int,0644);
  20. module_param(va,ulong,0644);
    print "\n";
  21. 
  22. static int find_pgd_init(void)
  23. {
  24.         unsigned long pa = 0;
  25.         struct task_struct *pcb_tmp = NULL;
  26.         pgd_t *pgd_tmp = NULL;
  27.         pud_t *pud_tmp = NULL;
  28.         pmd_t *pmd_tmp = NULL;
  29.         pte_t *pte_tmp = NULL;
  30. 
  31.         printk(KERN_INFO"PAGE_OFFSET = 0x%lx\n",PAGE_OFFSET);
  32.         printk(KERN_INFO"PGDIR_SHIFT = %d\n",PGDIR_SHIFT);
  33.         printk(KERN_INFO"PUD_SHIFT = %d\n",PUD_SHIFT);
  34.         printk(KERN_INFO"PMD_SHIFT = %d\n",PMD_SHIFT);
  35.         printk(KERN_INFO"PAGE_SHIFT = %d\n",PAGE_SHIFT);
  36. 
  37.         printk(KERN_INFO"PTRS_PER_PGD = %d\n",PTRS_PER_PGD);
  38.         printk(KERN_INFO"PTRS_PER_PUD = %d\n",PTRS_PER_PUD);
  39.         printk(KERN_INFO"PTRS_PER_PMD = %d\n",PTRS_PER_PMD);
  40.         printk(KERN_INFO"PTRS_PER_PTE = %d\n",PTRS_PER_PTE);
  41. 
  42.         printk(KERN_INFO"PAGE_MASK = 0x%lx\n",PAGE_MASK);
  43. 
  44.         if(!(pcb_tmp = find_task_by_pid(pid))) {
  45.                 printk(KERN_INFO"Can't find the task %d .\n",pid);
  46.                 return 0;
  47.         }
  48.         printk(KERN_INFO"pgd = 0x%p\n",pcb_tmp->mm->pgd);
  49.                 /* 判断给出的地址va是否合法(va<vm_end)*/
  50.         if(!find_vma(pcb_tmp->mm,va)){
  51.                 printk(KERN_INFO"virt_addr 0x%lx not available.\n",va);
  52.                 return 0;
  53.         }
  54.         pgd_tmp = pgd_offset(pcb_tmp->mm,va);
  55.         printk(KERN_INFO"pgd_tmp = 0x%p\n",pgd_tmp);
  56.         printk(KERN_INFO"pgd_val(*pgd_tmp) = 0x%lx\n",pgd_val(*pgd_tmp));
  57.         if(pgd_none(*pgd_tmp)){
  58.                 printk(KERN_INFO"Not mapped in pgd.\n");       
  59.                 return 0;
  60.         }
  61.         pud_tmp = pud_offset(pgd_tmp,va);
  62.         printk(KERN_INFO"pud_tmp = 0x%p\n",pud_tmp);
  63.         printk(KERN_INFO"pud_val(*pud_tmp) = 0x%lx\n",pud_val(*pud_tmp));
  64.         if(pud_none(*pud_tmp)){
  65.                 printk(KERN_INFO"Not mapped in pud.\n");
  66.                 return 0;
  67.         }
  68.         pmd_tmp = pmd_offset(pud_tmp,va);
  69.         printk(KERN_INFO"pmd_tmp = 0x%p\n",pmd_tmp);
  70.         printk(KERN_INFO"pmd_val(*pmd_tmp) = 0x%lx\n",pmd_val(*pmd_tmp));
  71.         if(pmd_none(*pmd_tmp)){
  72.                 printk(KERN_INFO"Not mapped in pmd.\n");
  73.                 return 0;
  74.         }
  75.         /*在这里,把原来的pte_offset_map()改成了pte_offset_kernel*/
  76.         pte_tmp = pte_offset_kernel(pmd_tmp,va);
  77. 
  78.         printk(KERN_INFO"pte_tmp = 0x%p\n",pte_tmp);
  79.         printk(KERN_INFO"pte_val(*pte_tmp) = 0x%lx\n",pte_val(*pte_tmp));
  80.         if(pte_none(*pte_tmp)){
  81.                 printk(KERN_INFO"Not mapped in pte.\n");
  82.                 return 0;
  83.         }
  84.         if(!pte_present(*pte_tmp)){
  85.                 printk(KERN_INFO"pte not in RAM.\n");
  86.                 return 0;
  87.         }
  88.         pa = (pte_val(*pte_tmp) & PAGE_MASK) |(va & ~PAGE_MASK);
  89.         printk(KERN_INFO"virt_addr 0x%lx in RAM is 0x%lx .\n",va,pa);
  90.         printk(KERN_INFO"contect in 0x%lx is 0x%lx\n",pa,
  91.                 *(unsigned long *)((char *)pa + PAGE_OFFSET));
  92.                                                        
  93.         return 0;
  94. 
  95. }     
....  
运行脚本如下:
caojiangfeng@ceagle-laptop:~$perl deleteRowNum.pl mem.c mem1.c
则在mem1.c中的文件没有行号了
阅读(2616) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~