【发布时间】:2014-07-27 17:34:35
【问题描述】:
操作系统:linux
我无法解释以下程序的输出:
#include <stdlib.h>
#include <sys/mount.h>
#include <errno.h>
#include <stdio.h>
*****更新代码*****
void mount_sys() {
if (0 != mount("none", "/sys", "sysfs", 0, ""))
{
/* handle error */
}
}
int
main()
{
int a,b, err;
FILE *file;
err=putenv("PATH=/bin");
printf("putenv return value =%d\n",err);
mount_sys();
;
err=system("echo 47 > /sys/class/gpio/export");
if (err == 0) {
printf("system called good");
} else {
perror("Error");
}
err=system("echo out > /sys/class/gpio/gpio47/direction");
if (err == 0) {
printf("system called good");
} else {
perror("Error");
}
err=system("echo 1 > /sys/class/gpio/gpio47/value");
if (err == 0) {
printf("system called good");
} else {
perror("Error");
}
return 0;
}
输出
Error: Success
Error: Success
Error: Success
如果所有系统调用都成功的话,我应该会收到 3 次 system called good 消息。
但看起来它失败了。但是为什么使用 perror() 打印的错误是Success ?
【问题讨论】:
-
为什么不打印出
err的值,看看你实际上从system()得到的返回值是什么? -
你没有声明
err变量? -
解决这个问题的另一种方法是在 shell 中输入
echo 47 > /sys/class/gpio/export(等等),看看会发生什么。您应该得到与使用该命令调用system相同的结果。 -
不管实现问题如何,为此任务使用子流程是相当愚蠢的。只需从您的程序写入 sysfs 节点 - 它会更高效且配置依赖项更少。
-
感谢您的评论,请告诉我如何使用 sysfs。