自从我使用C以来一直都是这样,所以我为这个简单的问题道歉。
我正在使用armeabi-v7a设备上的GPIO。我需要从Android应用程序中将GPIO接口导出到用户空间,我试图从JNI库中这样做。
要从终端执行此操作,我只需运行echo 199 > /sys/class/gpio/export
但我需要从JNI做到:(
我当前的尝试看起来像这样(有一些错误处理),但不起作用:
JNIEXPORT jboolean JNICALL Java_com_rnd_touchpanel_LED_exportGreen
(JNIEnv * je, jclass jc)
{
freopen("/sys/class/gpio/export", "w+", stdout);
printf("198");
fclose(stdout);
return JNI_TRUE;
}
然后我意识到导出实际上是二进制而不仅仅是一个文件,而且我忘记了如何生成新进程并将它们发送给所有这些。有人能刷新我的记忆吗?谢谢!
答案 0 :(得分:2)
如果您只是编写文件,则无需重定向stdout
- 只需使用fopen(3)
打开文件,使用fprintf(3)
写入文件,然后将其关闭{ {1}}。
如果您需要使用其标准的给定数据执行另一个流程,您可以选择以下几个选项:
答案 1 :(得分:1)
我已经做了很多C / C ++,但我相信通过popen完成一个新的过程。例如:
FILE* pOutput = popen("/usr/bin/python myscript.py", "r");
while ( fgets(line, 199, pOutput) )
{
printf("%5d: %s", entry++, line);
}
如果你在写入模式下打开proc,那么在S / O的另一篇文章中你似乎可以写入popen返回的FILE *:
FILE * file = popen("/bin/cat", "w");
fwrite("hello", 5, file);
pclose(file);