我正在尝试为使用libuci的OpenWrt路由器开发一个应用程序(用ANSI C编写)。 我读过这个有用的post: 如何找出eth0模式是静态的还是dhcp?
并且我开发了一个能够读取networking数据的应用程序(在这种情况下,如果启用了ppp,则读取)使用uci库。
char path[]="network.ppp.enabled"; struct uci_ptr ptr; struct uci_context *c = uci_alloc_context(); if(!c) return; if (strcmp(typeCmd, "GET") == 0){ if ((uci_lookup_ptr(c, &ptr, path, true) != UCI_OK) || (ptr.o==NULL || ptr.o->v.string==NULL)) { uci_free_context(c); return; } if(ptr.flags & UCI_LOOKUP_COMPLETE) strcpy(buffer, ptr.o->v.string); uci_free_context(c); printf("\n\nUCI result data: %s\n\n", buffer); }
现在我想尝试设置新的networking数据(所以我想启用PPP->设置PPP为1)我写道:
}else if (strcmp(typeCmd, "SET") == 0){ if ((uci_lookup_ptr(c, &ptr, path, true) != UCI_OK) || (ptr.o==NULL || ptr.o->v.string==NULL)) { uci_free_context(c); return; } ptr.o->v.string = "1"; if ((uci_set(c, &ptr) != UCI_OK) || (ptr.o==NULL || ptr.o->v.string==NULL)) { uci_free_context(c); return; } if (uci_commit(c, struct uci_package **p, true) != UCI_OK){ uci_free_context(c); return; } }
LibUci文档是不存在的,只有一些信息在文件uci.h中,我不知道如何填写uci_ptr结构,所以我从uci_lookup_ptr检索它,我已经改变ptr.o-> v.string并用新的参数启动uci_set ,但关于uci_commit我不知道结构uci_package ** p 。
有人打电话与我分享一些文件或给我一些例子?
非常感谢
UCI上的文档非常薄。 我想出来的方法是使用uci结构中的uci_ptr的.value属性。
从那个,我改变线:
ptr.o->v.string = "1";
至:
ptr.value = "1";
我也改变了你的提交行如下:
uci_commit(ctx, &ptr.p, false);
这对我有效。