900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 文件(文本 二进制)读写 利用popen读取linux命令读取结果

文件(文本 二进制)读写 利用popen读取linux命令读取结果

时间:2023-03-22 13:42:31

相关推荐

文件(文本 二进制)读写 利用popen读取linux命令读取结果

1文件打开方式介绍

/*

r :读操作,文件指针指向文件头 (若不存在则打开失败)

r+ :读、写操作,文件指针指向文件头 (若不存在则打开失败,若存在则清空文件)

w :写操作,文件指针指向文件头 (若不存在则新建,若存在则清空文件)

w+ :读、写操作,文件指针指向文件头 (若不存在则新建,若存在则清空文件)

a :写操作, 文件指针指向文件结尾处 (若不存在则新建,若存在则不清空文件,此时读取不到文件内容)

a+ :读、写操作,读指针指向文件开头,写指针指向文件结尾。 (若不存在则新建,若存在则不清空文件)

================ 加上b 则表示操作二进制文件 ===========

*/

2文本文件写操作

int fprintFile(char* filePath) {FILE *fp = fopen(filePath, "a");if (NULL == fp) {fprintf(stdout, "[%s]open file %s NG\n", __FUNCTION__, filePath);return -1;}char tmpStr[1024];snprintf(tmpStr, sizeof(tmpStr), "%s\n", "123");#if 1fprintf(fp, "%s", tmpStr); /*使用 fprintf 写入文件*/#elseif (EOF == fputs(tmpStr, fp)) { /*使用 fputs 写入文件*/fprintf(stdout, "fputs(tmpStr,fp) error\n");}#endiffflush(fp); /*将缓存中的数据写入文件*/fclose(fp);return 0;}

3文本文件读操作

int fgetsFile(char* filePath) {FILE *fp = fopen(filePath, "a+");if (NULL == fp) {fprintf(stdout, "[%s]open file %s NG\n", __FUNCTION__, filePath);return -1;}/*逐行读取文件*/char lineData[1024];int lineNum = 1;while (1) {//读取一行数据,最后一个字符的换行符号'\n'if (fgets(lineData, sizeof(lineData), fp) == NULL) {break;}fprintf(stdout, "line%03d: %s", lineNum++, lineData);}fclose(fp);return 0;}

4二进制文件写操作

int fwriteFile(char* filePath) {FILE *fp = fopen(filePath, "wb+"); /*可读性,读从文件开头,写从文件结尾处*/if (NULL == fp) {fprintf(stdout, "[%s]open file %s NG\n", __FUNCTION__, filePath);return -1;}int tmpInt[6] ={0,1,2,3,4,5};fwrite(tmpInt,sizeof(int),sizeof(tmpInt)/sizeof(int),fp); /*int 写入文件*/printf("[%s] sizeof(tmpInt)=%d\n", __FUNCTION__, sizeof(tmpInt));char tmpStr[7]="012345";fwrite(tmpStr,sizeof(char),sizeof(tmpStr),fp); /* 字符串 写入文件*/fflush(fp); /*将缓存中的数据写入文件*/fclose(fp);return 0;}

5二进制文件读操作

struct tmpStru{int tmpInt[6];char tmpStr[7];};int freadFile(char* filePath) {FILE* fp = fopen(filePath, "rb"); //新建一个可写的文件if (NULL == fp) {printf("[%s]open file %s NG\n", __FUNCTION__, filePath);return -1;}// 逐个数据读入 int tmpInt[6];fread(tmpInt,sizeof(int),sizeof(tmpInt)/sizeof(int),fp); /*使用 fread 写入文件*/printf("[%s] tmpInt[0]=%d\n", __FUNCTION__, tmpInt[0]);printf("[%s] tmpInt[5]=%d\n", __FUNCTION__, tmpInt[5]);char tmpStr[7];fread(tmpStr,sizeof(char),sizeof(tmpStr),fp); /*使用 fread 写入文件*/printf("[%s] tmpStr=%s\n", __FUNCTION__, tmpStr);// 一次性读入到结构体fseek(fp, 0, SEEK_SET); /*将文件指针指向开头*/tmpStru tmp;fread(&tmp,sizeof(char),sizeof(tmpStru),fp); /*使用 fread 写入文件*/printf("[%s] tmpInt[0]=%d\n", __FUNCTION__, tmp.tmpInt[0]);printf("[%s] tmpInt[5]=%d\n", __FUNCTION__, tmp.tmpInt[5]);printf("[%s] tmpStr=%s\n", __FUNCTION__, tmp.tmpStr);fclose(fp);return 0;}

6利用管道读取xshell执行结果

int freadPopen(char *xshellcmd) {FILE *fp;// fp = popen( "ls -l", "r" ); //将“ls -l”命令的输出 通过管道读取(“r”参数)到FILE* streamfp = popen( "ping -c 10 10.34.114.223", "r" );// fp = popen(xshellcmd, "r");char buf[1024];int num = 1;while (1) {memset(buf, '\0', sizeof(buf)); //初始化buf,以免后面写入乱码到文件中// 从管道中读取xshell 命令的结果#if 0// 若命令没有结束则fread会等待,直到可以读取到指定最大字符数size_t ret = fread(buf, sizeof(char), sizeof(buf), fp);if (ret < sizeof(buf)) {printf("\ntest end flag ret = %d\n", ret);break;}#else/* 若命令没有结束则fgets会等待,逐行读取文件 */if (fgets(buf, sizeof(buf), fp) == NULL) {break;}#endifprintf("[%03d]%s",num++, buf);}fclose(fp);return 0;}

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