OpenWrt Forum Archive

Topic: How to open & read a file?

The content of this topic has been archived on 24 Mar 2018. There are no obvious gaps in this topic, but there may still be some posts missing at the end.

Now, I have written a LuCI module to control a config file '/etc/config/mymodule_config'.I can use the LuCI webpage to change the configuration in the file.But I want to open the file and read the configuration from the file in my C program.How can I do that? The function "fopen" is perhaps undefined in the OpenWRT. Is there anybody can help me?

Well fopen is just part of stdio.h and can be used if desired, as far as I know

(Last edited by FriedZombie on 3 Jan 2014, 10:43)

if /etc/config/mymodule_config is a UCI config file, there is a UCI C API.

written_direcon wrote:

if /etc/config/mymodule_config is a UCI config file, there is a UCI C API.

My config /etc/config/mymodule_config file is like this:
config BeaconConfig 'Beacon_Config'
       option beacon_intval '10'
       option interupt_string 'Beacon Interupt!'

I think it's a UCI config file format.So i should can use the UCI C API to read it.

So I include the head file uci.h in the driver file build_dir/linux-ar71xx_generic/compat-wireless-2013-06-27/drivers/net/wireless/ath/ath9k/main.c.
I do this "#include <uci.h>" in this main.c.
But when I make the OpenWRT there is error like this:

CC [M]  /var/OpenWRT/attitude_adjustment/build_dir/linux-ar71xx_generic/compat-wireless-2013-06-27/drivers/net/wireless/ath/ath9k/main.o
In file included from /var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/sched.h:32:0,
                 from /var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/pthread.h:25,
                 from /var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/bits/uClibc_mutex.h:15,
                 from /var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/bits/uClibc_stdio.h:107,
                 from /var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/stdio.h:72,
                 from /var/OpenWRT/attitude_adjustment/staging_dir/target-mips_r2_uClibc-0.9.33.2/usr/include/uci.h:35,
                 from /var/OpenWRT/attitude_adjustment/build_dir/linux-ar71xx_generic/compat-wireless-2013-06-27/drivers/net/wireless/ath/ath9k/main.c:21:
/var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/time.h:121:8: error: redefinition of 'struct timespec'
include/linux/thread_info.h:12:8: note: originally defined here
In file included from /var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/sched.h:35:0,
                 from /var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/pthread.h:25,
                 from /var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/bits/uClibc_mutex.h:15,
                 from /var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/bits/uClibc_stdio.h:107,
                 from /var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/stdio.h:72,
                 from /var/OpenWRT/attitude_adjustment/staging_dir/target-mips_r2_uClibc-0.9.33.2/usr/include/uci.h:35,
                 from /var/OpenWRT/attitude_adjustment/build_dir/linux-ar71xx_generic/compat-wireless-2013-06-27/drivers/net/wireless/ath/ath9k/main.c:21:
/var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/bits/sched.h:72:8: error: redefinition of 'struct sched_param'
include/linux/sched.h:47:8: note: originally defined here
In file included from /var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/pthread.h:25:0,
                 from /var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/bits/uClibc_mutex.h:15,
                 from /var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/bits/uClibc_stdio.h:107,
                 from /var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/stdio.h:72,
                 from /var/OpenWRT/attitude_adjustment/staging_dir/target-mips_r2_uClibc-0.9.33.2/usr/include/uci.h:35,
                 from /var/OpenWRT/attitude_adjustment/build_dir/linux-ar71xx_generic/compat-wireless-2013-06-27/drivers/net/wireless/ath/ath9k/main.c:21:
/var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/sched.h:50:12: error: conflicting types for 'sched_setscheduler'
include/linux/sched.h:2083:12: note: previous declaration of 'sched_setscheduler' was here
In file included from /var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/pthread.h:26:0,
                 from /var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/bits/uClibc_mutex.h:15,
                 from /var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/bits/uClibc_stdio.h:107,
                 from /var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/stdio.h:72,
                 from /var/OpenWRT/attitude_adjustment/staging_dir/target-mips_r2_uClibc-0.9.33.2/usr/include/uci.h:35,
                 from /var/OpenWRT/attitude_adjustment/build_dir/linux-ar71xx_generic/compat-wireless-2013-06-27/drivers/net/wireless/ath/ath9k/main.c:21:
/var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/time.h:105:19: error: conflicting types for 'timer_t'
include/linux/types.h:34:26: note: previous declaration of 'timer_t' was here
/var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/time.h:134:8: error: redefinition of 'struct tm'
include/linux/time.h:181:8: note: originally defined here
/var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/time.h:164:8: error: redefinition of 'struct itimerspec'
include/linux/time.h:277:8: note: originally defined here
/var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/time.h:200:15: error: conflicting types for 'mktime'
include/linux/time.h:74:22: note: previous declaration of 'mktime' was here
In file included from /var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/pthread.h:29:0,
                 from /var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/bits/uClibc_mutex.h:15,
                 from /var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/bits/uClibc_stdio.h:107,
                 from /var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/stdio.h:72,
                 from /var/OpenWRT/attitude_adjustment/staging_dir/target-mips_r2_uClibc-0.9.33.2/usr/include/uci.h:35,
                 from /var/OpenWRT/attitude_adjustment/build_dir/linux-ar71xx_generic/compat-wireless-2013-06-27/drivers/net/wireless/ath/ath9k/main.c:21:
/var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/../../../../mips-openwrt-linux-uclibc/sys-include/signal.h:50:20: error: conflicting types for 'sigset_t'
/var/OpenWRT/attitude_adjustment/build_dir/linux-ar71xx_generic/linux-3.3.8/arch/mips/include/asm/signal.h:20:3: note: previous declaration of 'sigset_t' was here
In file included from /var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/include/stdint.h:5:0,
                 from /var/OpenWRT/attitude_adjustment/staging_dir/target-mips_r2_uClibc-0.9.33.2/usr/include/uci.h:36,
                 from /var/OpenWRT/attitude_adjustment/build_dir/linux-ar71xx_generic/compat-wireless-2013-06-27/drivers/net/wireless/ath/ath9k/main.c:21:
/var/OpenWRT/attitude_adjustment/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib/gcc/mips-openwrt-linux-uclibc/4.6.3/include/stdint-gcc.h:86:26: error: conflicting types for 'uintptr_t'
include/linux/types.h:45:24: note: previous declaration of 'uintptr_t' was here
make[11]: *** [/var/OpenWRT/attitude_adjustment/build_dir/linux-ar71xx_generic/compat-wireless-2013-06-27/drivers/net/wireless/ath/ath9k/main.o] Error 1
make[10]: *** [/var/OpenWRT/attitude_adjustment/build_dir/linux-ar71xx_generic/compat-wireless-2013-06-27/drivers/net/wireless/ath/ath9k] Error 2
make[9]: *** [/var/OpenWRT/attitude_adjustment/build_dir/linux-ar71xx_generic/compat-wireless-2013-06-27/drivers/net/wireless/ath] Error 2
make[8]: *** [/var/OpenWRT/attitude_adjustment/build_dir/linux-ar71xx_generic/compat-wireless-2013-06-27/drivers/net/wireless] Error 2
make[7]: *** [_module_/var/OpenWRT/attitude_adjustment/build_dir/linux-ar71xx_generic/compat-wireless-2013-06-27] Error 2
make[6]: *** [modules] Error 2
make[5]: *** [modules] Error 2
make[4]: *** [modules] Error 2
make[4]: Leaving directory `/var/OpenWRT/attitude_adjustment/build_dir/linux-ar71xx_generic/compat-wireless-2013-06-27'
make[3]: *** [/var/OpenWRT/attitude_adjustment/build_dir/linux-ar71xx_generic/compat-wireless-2013-06-27/.built] Error 2
make[3]: Leaving directory `/var/OpenWRT/attitude_adjustment/package/mac80211'
make[2]: *** [package/mac80211/compile] Error 2
make[2]: Leaving directory `/var/OpenWRT/attitude_adjustment'
make[1]: *** [/var/OpenWRT/attitude_adjustment/staging_dir/target-mips_r2_uClibc-0.9.33.2/stamp/.package_compile] Error 2
make[1]: Leaving directory `/var/OpenWRT/attitude_adjustment'
make: *** [world] 错误 2

seems like that after I include the uci.h,some date type or structure is redefined.
How should I fix it?

(Last edited by MyAngelLYC on 6 Jan 2014, 03:21)

The discussion might have continued from here.