对fopen()函数的理解如下:
执行
对sprintf()函数的理解如下:
执行
I love CSDN
11
#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