1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 函数 —— popen() fscanf() sprintf() 执行shell命令并获取结果

函数 —— popen() fscanf() sprintf() 执行shell命令并获取结果

时间:2018-10-13 13:15:56

相关推荐

函数 —— popen()   fscanf()  sprintf() 执行shell命令并获取结果

对fopen()函数的理解如下:

执行

root :x:0 0: root: /root: /bin/bash

对sprintf()函数的理解如下:

执行

I love CSDN

11

如何在sprintf中打印“双引号?%百分号?

#include <stdio.h>#include <time.h>int main(){char s[80];sprintf(s,"% %\""); //转义字符方法printf("%s\n",s); //%"sprintf(s,"%c %c",'%','"');//字符常量方法printf("%s\n",s); //% "return 0;}

对fscanf()函数的理解如下:

简单的使用--1:

问题描述:opoen函数执行,shell命令中的cat命令,并用fscanf函数获取查找到的值

int main(){FILE *fp;char cmd[255] = {0};char tmp[255] = {0};sprintf(cmd,"cat /etc/passwd");printf("cmd == %s\n",cmd); //cmd == cat /etc/passwdfp = popen(cmd,"r");fscanf(fp,"%s",tmp);printf("tmp=%s strlen(tmp)=%d\n",tmp,strlen(tmp)); //tmp=root:x:0:0:root:/root:/bin/bash strlen(tmp)=31 pclose(fp);}

简单的使用--2:

问题描述:查找文件中的某个字段,存在则重写,不存在则加入最后一行。

#include<stdio.h>#include<stdio.h>#include<stdlib.h>#define TEST_CONFIG "test.conf"int main(){FILE *fp;char *cmd = (char*)malloc(sizeof(char)*128);int input = 0;int line = 0;printf("Please input you want to find number:");scanf("%d",&input);//sprintf(cmd,"cat %s | awk '{print $1}' | grep -v '^\\$' | grep -v '^#' | grep -n '^%d$'",TEST_CONFIG,input);sprintf(cmd,"cat %s | awk '{print $1}'| grep -n '^%d$'",TEST_CONFIG,input);// 需要\字符使用\\来代替'^str$'grep中:^匹配以str开头,$匹配以str结尾(严格匹配)printf("%s\n",cmd);fp = popen(cmd,"r");fscanf(fp,"%d",&line);printf("line == %d\n",line);pclose(fp);if(line != 0) //exist , rewrite ==》 input+1{printf("exit!\n");sprintf(cmd,"sed -i '%dc %d' %s",line,input+1,TEST_CONFIG);}else{printf("bb\n");sprintf(cmd,"sed -i '$a%d' %s",input,TEST_CONFIG);printf("%s\n",cmd);}fp = popen(cmd,"r");pclose(fp);free(cmd);return 0;}

/*结果如下所示:***test.conf$11#4455***./a.outPlease input you want to find number:55cat test.conf | awk '{print $1}'| grep -n '^55$'line == 3exit!***result$11#4456***./a.outcat test.conf | awk '{print $1}'| grep -n '^77$'line == 0bbsed -i '$a77' test.conf***result$11#445677*/

简单的使用--2:

问题描述:替换文件中的某一列的值

asdfgh popen.txt《--【文件该之前】 asdfgh popen

qwerty popen.c 【文件该之后】--》 qwerty popen

#include <stdio.h>int main(){FILE *fp;char cmd[255] = {0};char line[255] = {0};char newline[255] = {0};int i = 1, j = 1;sprintf(cmd,"cat popen.txt");printf("%s\n",cmd);fp = popen(cmd,"r");if(NULL == fp){return 1;}while(NULL != fgets(line,sizeof(line),fp)){printf("line[%d] = %s",i,line);i++;}pclose(fp);//替换文件中的第二列 全部为popen, [[ popen引号需要转义]] [[mv时候加-f取消 提示输入y/n]] //[[并且要加cat命令 否则后需的fgets没有值]]sprintf(cmd,"awk '{print $1,\"popen\"}' popen.txt > temp_1 && mv -f temp_1 popen.txt && cat popen.txt");printf("%s\n",cmd);fp = popen(cmd,"r");if(NULL == fp){printf("asda\n");return 1;}while(NULL != fgets(line,sizeof(line),fp)){printf("line[%d] = %s",j,line);j++;}pclose(fp);return 0;}

//结果显示如下:::line[1] = asdfgh popen.txtline[2] = qwerty popen.cawk '{print $1,"popen"}' popen.txt > temp_1 && mv -f temp_1 popen.txt && cat popen.txtline[1] = asdfgh popenline[2] = qwerty popen

awk的其他的使用请看【Linux命令之 —— grep \ls \ ll \ sed \ bg fg \ ipset \ wc \ ifconfig \ awk】

参考链接:/52php/p/5722238.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。