linux c 例子 c语言程序例子

Linux 如何查看主机的c

在Linux系统中,要了解主机的CPU和内存信息,可以通过多种命令进行查看。首先,我们来看一下查看CPU核心数的方法:

1.使用top命令:在终端输入top命令后,进入界面,按数字键1,即可在顶部信息中看到当前系统的总CPU核心数,如图所示,一个4核CPU的例子。

2.另一方法是通过proc文件系统:执行命令`cat/proc/cpuinfo| grep processor`,此命令将直接显示所有处理器的信息,从中可以数出总的CPU核心数。

接下来,我们探讨查看总内存的方法:

1.通过free命令:运行`free-h`,这个命令会以更易读的格式显示内存使用情况,包括总内存的总量。

2.利用proc虚拟文件系统:输入`head/proc/meminfo`,该命令将显示内存信息的头几行,其中包含总内存的详细数据。

Linux里面uniq -c命令作用是什么

uniq [选项]文件

说明:这个命令读取输入文件,并比较相邻的行。在正常情况下,第二个及以后更多个重复行将被删去,行比较是根据所用字符集的排序序列进行的。该命令加工后的结果写到输出文件中。输入文件和输出文件必须不同。如果输入文件用“-”表示,则从标准输入读取。

该命令各选项含义如下:、

– c显示输出中,在每行行首加上本行在文件中出现的次数。它可取代- u和- d选项。

– d只显示重复行。

– u只显示文件中不重复的各行。

– n前n个字段与每个字段前的空白一起被忽略。一个字段是一个非空格、非制表符的字符串,彼此由制表符和空格隔开(字段从0开始编号)。

+n前n个字符被忽略,之前的字符被跳过(字符从0开始编号)。

– f n与- n相同,这里n是字段数。

– s n与+n相同,这里n是字符数。

接下来通过实践实例说明:

复制代码代码如下:

[root@stu100~]# cat test

boy took bat home

boy took bat home

girl took bat home

boy took bat home

boy took bat home

dog brought hat home

dog brought hat home

dog brought hat home

看test文件的内容

复制代码代码如下:

[root@stu100~]# uniq test

boy took bat home

girl took bat home

boy took bat home

dog brought hat home

uniq命令不加任何参数,仅显示连续重复的行一次

复制代码代码如下:

[root@stu100~]# uniq-c test

2 boy took bat home

1 girl took bat home

2 boy took bat home

3 dog brought hat home

1

-c参数显示文件中每行连续出现的次数。

复制代码代码如下:

[root@stu100~]# cat test|sort| uniq-c

1

4 boy took bat home

3 dog brought hat home

1 girl took bat home

排序后再显示

复制代码代码如下:

[root@stu100~]# uniq-d test

boy took bat home

boy took bat home

dog brought hat home

-d选项仅显示文件中连续重复出现的行。

复制代码代码如下:

[root@stu100~]# uniq-u test

girl took bat home

-u选项显示文件中没有连续出现的行。

复制代码代码如下:

[root@stu100~]# uniq-f 2-s 2 test

boy took bat home

忽略每行的前2个字段,忽略第二个空白字符和第三个字段的首字符,结果at home

复制代码代码如下:

[root@stu100~]# uniq-f 1 test

boy took bat home

dog brought hat home

忽略每行的第一个字段,这样boy,girl开头的行看起来是连续重复的行。

复制代码代码如下:

[root@stu100~]# uniq-D test

boy took bat home

boy took bat home

boy took bat home

boy took bat home

dog brought hat home

dog brought hat home

dog brought hat home

显示所有重复的行,每个重复的行都显示

当你有一个包含相同条目的雇员(employee)的文件,你可以以如下方式来删除相同的条目

复制代码代码如下:

$ sort namesd.txt| uniq

$ sort–u namesd.txt

如果你想知道有多少行是相同的,可以像下面这个做。以下例子中的第一列显示该行的重复数量。在本例中,以Alex和Emma开头的行,在文件中有两个重复行。

复制代码代码如下:

$ sort namesd.txt| uniq–c

2 Alex Jason:200:Sales

2 Emma Thomas:100:Marketing

1 Madison Randy:300:Product Development

1 Nisha Singh:500:Sales

1 Sanjay Gupta:400:Support

3.以下命令仅仅列出了相同的条目

复制代码代码如下:

$ sort namesd.txt| uniq–cd

2 Alex Jason:200:Sales

2 Emma Thomas:100:Marketing

linux下,编写一个c语言程序实现...(详细见正文)!急!

//没有统计功能,要的话再Hi我

/*

程序功能:查询IP

使用方法:

将IP库保存为c:\data.txt,将要查询的IP保存为c:\ip.txt;编译好本程序后,运行后产生c:\result.txt结果文件

程序BUG:data文件最后需要以两个换行结束

*/

#include<stdio.h>

#include<string.h>

#include<windows.h>

#include<stdlib.h>

#define TOTAL_INFO 100

extern void str_init(char* str1, char* str2, char* str3, char* str4);//字符串初始化函数

extern void str_init_total_info(char*str);

extern int read_file(FILE*fp, char*str);//读取IP

extern void read_dt2_next(FILE*fp, char*str);//单独保存数据库中第二IP段,最大IP范围

extern void next_line_data(FILE*fp);//专用:跳到下一行

extern void next_line_ip(FILE*fp);

extern int total_line(FILE*fp);//检测文件总行数

int main(int argc, char*argv[])

{

FILE*fp_data,*fp_ip,*fp_result;

char t_dt1[5], t_dt2[5], t_dt3[5], t_dt4[5];

char t_ip1[5], t_ip2[5], t_ip3[5], t_ip4[5];//4个IP段,便于比较和保存

char t_dt2_next[5];//保存数据库中同一行第二IP段,最大IP范围

char addr_ip[50];//输出处理后的IP归属地

char temp;

char ip_total_info[30];

int flag_loop_ip=1, flag_loop_data=1;

int i=0, j=0, k=0, flag_complete=0;

int len_dt1, len_dt2;

int len_ip1, len_ip2;

int total_line_nu=0;

str_init(t_dt1, t_dt2, t_dt3, t_dt4);//初始化:将字符串以'\0'填充

str_init(t_ip1, t_ip2, t_ip3, t_ip4);

str_init_total_info(ip_total_info);

fp_data=fopen("c:\\data.txt","r");

fp_ip=fopen("c:\\ip.txt","r");

fp_result=fopen("c:\\result.txt","a+");//追加文件,若存在

total_line_nu=total_line(fp_ip);//获取ip.txt文件的总行数

fseek(fp_ip, 0, SEEK_SET);//将fp_ip移动到文件开头

for(i=0; i<total_line_nu; i++)//外层总循环,由ip.txt文件的总行数控制

{

flag_complete=0;

len_ip1=read_file(fp_ip, t_ip1);

len_ip2=read_file(fp_ip, t_ip2);

read_file(fp_ip, t_ip3);

read_file(fp_ip, t_ip4);

for(j=0; flag_complete== 0; j++)//内层总循环,控制条件:是否完成一次比较

{

len_dt1=read_file(fp_data, t_dt1);//读取各段IP,并保存各段IP长度

len_dt2=read_file(fp_data, t_dt2);

read_file(fp_data, t_dt3);

read_file(fp_data, t_dt4);

read_dt2_next(fp_data, t_dt2_next);//单独保存数据库中第二IP段,最大IP范围

fseek(fp_data,9,SEEK_CUR);//文件指针后移9位,指向汉字将要出现的地方

fgets(addr_ip, 20, fp_data);//单独保存IP信息(汉字)

for(k=0;(temp=fgetc(fp_data))!='\n'; k++)//此处为了使主程序的内层循环自动换行

{

}

// fseek(fp_data,2,SEEK_CUR);//使fp_data指向下一行

// next_line(fp_data);

if(len_dt1==len_ip1&& len_dt2==len_ip2)//如果各段IP都一样长,则比较

{

if(!strcmp(t_dt1, t_ip1))//如果第一段的IP内容一样,比较第二段

{

if(((strcmp(t_dt2, t_ip2))<= 0)&&((strcmp(t_dt2_next, t_ip2))>= 0))

{//如果要查询IP在这个IP段(BUG为:最小范围和最大范围个数不一样)

flag_complete= 1;//完成一次循环

strcpy(ip_total_info,t_ip1);//整理要输出的信息

strcat(ip_total_info,".");

strcat(ip_total_info,t_ip2);

strcat(ip_total_info,".");

strcat(ip_total_info,t_ip3);

strcat(ip_total_info,".");

strcat(ip_total_info,t_ip4);

strcat(ip_total_info,"\t");

strcat(ip_total_info,addr_ip);

fputs(ip_total_info, fp_result);

fseek(fp_data, 0, SEEK_SET);//将fp_data移动到文件开头

}

}

}

//不满足条件时返回循环,因为readfile函数的设置,不用再重置到下一行

}

}

// printf("ftell:%d\n",ftell(fp_data));//获取文件流的读取位置

// fseek(fp,2,SEEK_CUR);//

fclose(fp_data);

fclose(fp_ip);

fclose(fp_result);

return 0;

}

void str_init(char*str1, char*str2, char*str3, char*str4)

{

int i;

for(i=0; i<5; i++)

{

str1[i]='\0';

str2[i]='\0';

str3[i]='\0';

str4[i]='\0';

}

}

///////////////////////////////////////////////////////////////////////////////////////////////////

int read_file(FILE*fp, char* str)

{

int i, len;

char t;

for(i=0;((str[i]=fgetc(fp))>='0')&&(str[i]<='9'); i++)//从文件中读取字符串,直到非数字结束

{

}

str[i]='\0';//将最后读取的非数字填充掉

len=strlen(str);

return len;

}

void read_dt2_next(FILE*fp, char*str)//单独保存数据库中第二IP段,最大IP范围

{

char temp;

int flag=0,i;

for(i=0; flag!= 1; i++)//直到找到第二段最大范围IP

{

temp= fgetc(fp);

if(temp=='.')//第二段IP以第一段的.开始

{

flag= 1;

}

}

//保存找到的第二段最大范围IP

for(i=0;((str[i]=fgetc(fp))>='0')&&(str[i]<='9'); i++)//从文件中读取字符串,直到非数字结束

{

}

str[i]='\0';//将最后读取的非数字填充掉

}

void next_line_data(FILE*fp)//使文件指针指向下一行

{

char t;

t=fgetc(fp);

while(t!='\n')

{

// printf("temp t:%c\n", t);

// system("pause");

t=fgetc(fp);

}

t=fgetc(fp);

if(t!='\n')

{

fseek(fp,-1,SEEK_CUR);

}

else

{

t=getc(fp);

if(t!='\n')

{

fseek(fp,-1,SEEK_CUR);

}

}

//fseek(fp,4,SEEK_CUR);//精确定位到下下一行,因为两行之间有一个空白行

//t=fgetc(fp);//读取换行符,使文件指针指向下一行

}

void next_line_ip(FILE*fp)//使文件指针指向下一行

{

char t;

t=fgetc(fp);

while(t!='\n')

{

// printf("temp t:%c\n", t);

// system("pause");

t=fgetc(fp);

}

fseek(fp,2,SEEK_CUR);//精确定位到下下一行,因为两行之间有一个空白行

//t=fgetc(fp);//读取换行符,使文件指针指向下一行

}

int total_line(FILE*fp)//检测总行数

{

char t1, t2;

int flag=0, flag2=0;

t1= fgetc(fp);

t2= fgetc(fp);

while(t1!= EOF)//到达文件尾或出错返回EOF

{

if((t1=='\n')&&(t1=fgetc(fp)!= EOF))

{

flag2=0;

flag+=1;

}

else flag2=1;

t1= fgetc(fp);

}

flag=flag+flag2;

return flag;

}

void str_init_total_info(char*str)

{

int i;

for(i=0; i<TOTAL_INFO; i++)

{

str[i]='\0';

}

}

阅读剩余
THE END