威尼斯wns.9778官网活动_vnsc威尼斯城官网

热门关键词: 威尼斯wns.9778官网活动,vnsc威尼斯城官网
当前位置:威尼斯wns.9778官网活动 > 计算机教程 > 威尼斯wns.9778官网活动详解linux中的strings命令简介

威尼斯wns.9778官网活动详解linux中的strings命令简介

文章作者:计算机教程 上传时间:2019-05-10

在Linux下搞软件开发的朋友, 几乎没有不知道strings命令的。我们先用man strings来看看:

给程序和库添加版本号和库,有利于维护和升级。

strings - print the strings of printable characters in files. 

当然你可以在文件名上体现,比如有个程序叫 yun,文件名写为 yun_1.0.2,但这个需要每次手动维护,而且不能100%确保当前程序就是那个版本。所以,把版本号体现在程序内部,是一个不错的选择。

 意思是, 打印文件中可打印的字符。  我来补充一下吧, 这个文件可以是文本文件(test.c), 可执行文件(test),  动态链接库(test.o), 静态链接库(test.a)


脱离代码地长篇大论而不去实际验证, 不是我的风格。 还是搞点代码下菜吧(代码存在test.c中):

我是做法分割线 -------------------------------**

#include <stdio.h> 

int add(int x, int y) 
{ 
    return x   y; 
} 

int main() 
{ 
    int a = 1; 
    int b = 2; 
    int c = add(a, b); 
    printf("oh, my dear, c is %dn", c); 

    return 0; 
} 

一、可执行程序

 我们来看看strings test.c的结果:

程序内部定义版本宏,然后 main 函数通过 -v 参数,打印版本号和编译时间,代码如下:

[taoge@localhost learn_c]$ strings test.c  
#include <stdio.h> 
int add(int x, int y) 
  return x   y; 
int main() 
  int a = 1; 
  int b = 2; 
  int c = add(a, b); 
  printf("oh, my dear, c is %dn", c); 
  return 0; 
[taoge@localhost learn_c]$  

注:__DATE__(编译日期), __TIME__(编译时间)

可以看到, 确实打印出了test.c中的很多字符。

#include <stdio.h>
#include <string.h>

#define VERSION "0.0.2" // 此处每次发布版本要手动更新
#define NAME "yun"

static void show_info(char *argv[])
{
 if (0 == strcmp("-v", argv[1]))
 {
  printf("%s version: %s (%s, %s)n", NAME, VERSION, __DATE__, __TIME__);
  return;
 }
 else if (0 == strcmp("-h", argv[1]))
 {
  printf("Usage: %s [options]n", NAME);
  printf("Options:n");
  printf(" voidtRun %sn", NAME);
  printf(" -vtDisplay %s version informationn", NAME);
  printf(" -htDisplay help informationn");
  return;
 }

 printf("Usage: %s [-v | -h]n", NAME);
 return;
}

int main(int argc, char *argv[])
{
 if (2 == argc)
 {
  show_info(argv);
  return 0;
 }

 printf("Can you feel me?n");

 return 0;
}

下面, 我们对可执行文件用strings试试, 如下:

运行效果:

[taoge@localhost learn_c]$ gcc test.c  
[taoge@localhost learn_c]$ strings a.out  
/lib/ld-linux.so.2 
=$TsU 
__gmon_start__ 
libc.so.6 
_IO_stdin_used 
printf 
__libc_start_main 
GLIBC_2.0 
PTRh  
[^_] 
oh, my dear, c is %d 
[taoge@localhost learn_c]$  

威尼斯wns.9778官网活动 1

可以看到, 打印出了a.out中很多字符。

二、动态库、静态库

实际上, 如果有目标文件、静态库或动态库, , 也是可以用strings命令进行打印操作的。 我们来看看:

库不采用 -v 这种方法,因为不是可执行程序。

xxx.h文件:

我们可以给程序添加一个版本号字符串,编译成库后使用 strings 命令查看,代码如下:

void print(); 

/* add.h */

本文由威尼斯wns.9778官网活动发布于计算机教程,转载请注明出处:威尼斯wns.9778官网活动详解linux中的strings命令简介

关键词: