嵌入式 简单的读取文件并打印指定字符串的值

原创 2013年12月04日 19:50:35
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <fcntl.h>
#include <sys/types.h>

#ifdef __DEBUG__
    #define msg_print(...) printf(__VA_ARGS__)
#else
    #define msg_print(...)
#endif

#define CONF_FILE_PATH "./ipnc_conf.conf"
#define MAX_VALUE_LEN 32
#define ARGV_NOT_EXIST 2
#define ARGV_EXIST 5

#define DEFALUT_JIPNC_ID "jipnc00000000005"
#define DEFALUT_JIPNC_KEY "12345678"
#define DEFALUT_JIPNC_DEVICE_TYPE "30"


int joseph_read_conf(const char *key, char *value);
int joseph_create_conf(const char *id, const char *key, const char *device_type, int flag);

int joseph_create_conf(const char *id, const char *key, const char *device_type, int flag)
{
   int conf_fd;
   int ret;
   char buffer[1024] = {0};
   
   if(flag == ARGV_NOT_EXIST){
   	conf_fd = open(CONF_FILE_PATH, O_RDONLY | O_EXCL, 777);
	msg_print("conf_fd = %d\n",conf_fd);
   	if(conf_fd > 0){
       	    close(conf_fd);
       	    return 0;
   	}
   }

   conf_fd = open(CONF_FILE_PATH, O_WRONLY | O_CREAT | O_TRUNC, 777);
   sprintf(buffer, "ipnc_id %s\nipnc_key %s\ndevice_type %s\n", id, key, device_type);
   ret = write(conf_fd, buffer, 1024);
   msg_print("ret = %d\nbuffer = %s", ret, buffer);

   close(conf_fd);
   return 0;

}

int joseph_read_conf(const char *key, char *value)
{
    FILE *stream = NULL;
    char cmd[64] = {0};

    if(NULL == key || 0 == strlen(key)){
    	msg_print("invalid parameter!\n");
	return -1;
    }

    sprintf(cmd, "cat %s | awk '/%s/{print $2}'", CONF_FILE_PATH, key);
    msg_print("cmd = %s\n",cmd);

    stream = popen(cmd,"r");

    if(fread(value, sizeof(char), MAX_VALUE_LEN, stream) <= 0){
    	pclose(stream);
	return -1;
    }
    strcpy(value + strlen(value) - 1, "\0");
    msg_print("%s = %s\n", key, value);
    
    pclose(stream);
    system("rm -rf ./ipnc_conf.conf");
    return 0;
}

int main(int argc,char *argv[])
{
    char value[32] = {0};

    //if(argc != 1 || argc != 4)
    //{
    //	printf("invalid parameter!\n");
    //	return -1;
    //}
#if 1
    if(ARGV_NOT_EXIST == argc)
    	joseph_create_conf(DEFALUT_JIPNC_ID, DEFALUT_JIPNC_KEY ,DEFALUT_JIPNC_DEVICE_TYPE, ARGV_NOT_EXIST);
    else if(ARGV_EXIST == argc)
    	joseph_create_conf(argv[1], argv[2] ,argv[3], ARGV_EXIST);
    else{
    	printf("invalid parameter!\n");
    	return -1;
    }
#endif 
    joseph_read_conf("ipnc_id", value);
    printf("%s = %s\n", "ipnc_id", value);

    return 0;
}

从屏幕读取字符串,并提取其中数字串,再次打印到屏幕或写入一个文件

细节决定成败,毕业两年多,几乎t
  • fengliang191
  • fengliang191
  • 2014年08月06日 22:01
  • 2981

Python 实例一 统计指定文件的行数或读取指定文件指定行数的内容

1. pycharm 开发环境中新建 #coding=utf-8 count = len(open('F:\test\test.txt','rU').readlines()) print(count...
  • daiqinge
  • daiqinge
  • 2016年01月16日 23:05
  • 2405

shell实例浅谈之六文件特定行打印的多种方法

一、问题       DOS是Denial of Service的简称,即拒绝服务,造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务。最常见的DoS攻击有计算机网络...
  • taiyang1987912
  • taiyang1987912
  • 2014年10月13日 21:45
  • 8253

java IO 一 (读写字符串,拷贝文本文件)

首先扯点别的:真是好记性不如烂笔头啊,关于java的输入输出流真是看一遍忘一遍,每次用的时候还得查看API,也是艰难。除了知道IO可以分为输入流,输出流,字符流,字节流,其他的忘得干干净净的,都还给老...
  • leilifengxingmw
  • leilifengxingmw
  • 2016年04月21日 16:27
  • 1287

嵌入式 Linux应用程序如何读取(修改)芯片寄存器的值

这一问题来自项目中一个实际的需求: 我需要在Linux启动之后,确认我指定的芯片寄存器是否与我在uboot的配置一致。 举个例子: 寄存器地址:0x20000010负责对DDR2的时序配置,该寄存器是...
  • skdkjxy
  • skdkjxy
  • 2013年12月02日 14:54
  • 1764

C语言sscanf()函数:从字符串中读取指定格式的数据

sscanf()函数用于从字符串中读取指定格式的数据,其原型如下:        int sscanf( string str, string fmt, mixed var1, mixed va...
  • lixiaogang_theanswer
  • lixiaogang_theanswer
  • 2016年11月23日 12:52
  • 914

如何利用C/C++逐行读取txt文件中的字符串(可以顺便实现文本文件的复制)

如下代码均在Windows/VC++6.0下测试通过, 请一定注意Linux和Windows文件格式的区别        先用C语言写一个丑陋的程序: [cpp] view...
  • weiyuefei
  • weiyuefei
  • 2017年06月22日 16:09
  • 1850

C#实现读取字符串特定字符位置后面的数据

C#实现读取字符串特定位置数据     这里将给大家介绍怎么实现C#采用正则表达方式读取某段字符串中指定位置后面的数据内容,某种程度上可替代数据库的功能。 private vo...
  • laozhuxinlu
  • laozhuxinlu
  • 2015年11月20日 22:40
  • 3314

Python读取文件中特定位置及特定数目的内容

假设,有一个文件text.txt,包含如下内容: “”
  • liuchunming033
  • liuchunming033
  • 2014年09月18日 17:39
  • 10564

shell awk读取文件中的指定行的指定字段

1.awk功能和实用形式 awk指定读取文件中的某一行的某个字段 awk      可以设置条件来输出文件中m行到n行中每行的指定的k字段,使用格式如下 awk    ‘NR==m,...
  • huangjin0507
  • huangjin0507
  • 2015年05月06日 18:43
  • 4430
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:嵌入式 简单的读取文件并打印指定字符串的值
举报原因:
原因补充:

(最多只允许输入30个字)