篇一:Linux下使用awk批量删除共享内存
Linux下使用awk批量删除共享内存
1.awk简介
awk 是一个强大的文本分析工具。sed 常常用于一整个行的处理,而 awk 则倾向于以 空格和tab键为默认分隔符将每行切片成一个个域(也就是一列)来处理。Awk适用于小型的数据数据处理
awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。
2. awk语法格式
awk 'pattern1 {action1} pattern2 {action2} ...' filename
awk 后面接两个单引号并加上大括号 {} 来对匹配模式的数据进行处理。 awk 可以处理后面指定的文件,也可以通过管道命令”|”读取来自前个命令的标准输出。
3.工作流程
awk工作流程是这样的:读入有'\n'换行符分割的多条记录,然后将每一条记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是空格键和tab键。 以last命令结合awk来演示awk一个简单的筛选输出。
们用 last 可以将登陆者的数据取出来,结果如下所示:
[root@lvlv]# last -n 4
root pts/1192.168.1.100 Tue Feb 10 11:21still logged in root pts/1192.168.1.100 Tue Feb 10 00:46 - 02:28 (01:41) root pts/1192.168.1.100 Mon Feb 9 11:41 - 18:30 (06:48) dmtsaipts/1192.168.1.100 Mon Feb 9 11:41 - 11:41 (00:00)
若我想要取出帐号与登陆者的 IP ,且帐号与 IP 之间以 [tab] 隔开,则会变成这样:
[root@lvlv]# last -n 5 | awk '{print $1 "\t" $3}'
root 192.168.1.100
root 192.168.1.100
root 192.168.1.100
dmtsai 192.168.1.100
4.利用awk批量删除共享内存
首先利用“ipcs –m”查看共享内存信息,然后再利用“ipcrm -m shmid”删除共享内存。利用awk进行批量删除共享内存的shell脚本如下:
ipcs -m|awk '$2~/[0-9]+/{print $2}'|
while read s
do
ipcrm -m $s
done
结合上面对awk的介绍,应该不难看懂脚本。awk '$2~/[0-9]+/{print $2}'表示打印出只含阿拉伯数字的每行的第二列,即共享内存标识。awk中正则表达式由两个斜杠包围,即/REG/,
正则表达式前加上代字号(波浪号)~表示与之匹配,!~表示不匹配。因此,$2~/[0-9]+/表示只含有阿拉伯数字组成的共享内存ID。
篇二:LINUX进程间采用共享内存方式进行数据通讯案例源代码参考
LINUX进程间采用共享内存方式进行数据通讯案例源代码参考:
进程一,往一块共享内存sh_id中写数据:
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <unistd.h>
typedef struct Data{
char title[10];
float price;
} ;
main(int argc, char** argv)
{
int sh_id,i;
key_t mykey;
char tem;
Data *p1;
char* path="/user";
mykey = ftok(path,0);
if(mykey==-1)
perror("error");
sh_id=shmget(mykey,2048,IPC_CREAT);
if(sh_id==-1)
{
perror(" error");
return;
}
p1=(Data *)shmat(sh_id,NULL,0);
for(i=0;i<10;i++)
{
strcpy((p1+i)->title,"title_sample");
(p1+i)->price=(float)i;
}
if(shmdt(p1)==-1)
perror(" detach error ");
}
进程二,从一块共享内存sh_id中读数据:
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <unistd.h>
typedef struct Data{
char title[10];
float price;
} ;
main(int argc, char** argv)
{
int sh_id,i;
key_t mykey;
char tem;
Data *p1;
char* path="/user";
mykey = ftok(path,0);
if(mykey==-1)
perror("error");
sh_id=shmget(mykey,2048,IPC_CREAT);if(sh_id==-1)
{
perror(" error");
return;
}
p1=(Data *)shmat(sh_id,NULL,0);
for(i=0;i<10;i++)
{
Printf(“%s----%f\n”,(p1+i)->title, (p1+i)->price); }
if(shmdt(p1)==-1)
perror(" detach error ");
}
《linux,共享内存大小》
由:免费论文网互联网用户整理提供,链接地址:
http://m.csmayi.cn/meiwen/40213.html
转载请保留,谢谢!
- 上一篇:高三班级应战书
- 下一篇:政府个人工作总结