【发布时间】:2015-08-21 19:36:52
【问题描述】:
我编写了一个简单的程序来使用没有轮询的 linux sysfs 读取 gpio,但是当我想读取少于三个字符时 fgetc 和 fgets 无法正常工作我想知道这只是一个错误还是我做错了在我的代码中。
FILE* fd = fopen("/sys/class/gpio/gpio12/value", "rw+");
if(!fd) {
cerr << "could not open the file." << endl;
}
setbuf(fd, NULL);
while(true) {
if(fseek(fd, 0L, SEEK_SET)) {
cerr << "could not reposition the indicator" << endl;
}
char val = fgetc(fd);
cout << val << '\r';
cout.flush();
};
即使我对 gpio#12 施加高电平电压,上述代码也总是返回“0”,但是当我替换 fgetc 并且它与这些代码一致时
char str[3] = {0};
fgets(str, 3, fd);
cout << str[0] << 'r';
行程序正常工作。另一方面,值文件仅包含一个字符“1”或“0”,人们可能会考虑使用带有 2 个或 1 个字符的 fget。在这种情况下,它也不起作用。可以请一位专业人士解释那里发生了什么。上面的代码有什么问题。 我使用g++编译代码,我的gcc版本是4.6.3-14 armhf
【问题讨论】:
标签: c++ c linux embedded-linux fgets