1.板子掉电,系统可检测出掉电,并且可以写入日志,但是检测掉电对应的IO口文件一直是高电平,感觉低电平信息还在缓冲,read读文件读不到,该用什么方法可以读到缓冲内的东西
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <fcntl.h>
#include <termios.h>
#include <sys/select.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <linux/if.h>
#include <syslog.h>
const char GPIO_FILE[] = "/sys/class/gpio/export";
int opengpio(int sum)
{ char ss[10];
sprintf(ss,"%d",sum);
int fd1=open(GPIO_FILE, O_WRONLY);
//O_WRONLY|O_SYNC|O_RSYNC|O_DIRECT
if(fd1<0)
{
perror("open fail");
return 0;
}
write(fd1,ss,strlen(ss));
close(fd1);
return 0;
}
int main(int argc, char const *argv[])
{
int powser=53;
char gpio2[50]={0};
char buffer[5]={0};
char oldbuffer[5]={0};
int flag=0;
FILE * fp;
sprintf(gpio2,"/sys/class/gpio/gpio%d/value",powser);
opengpio(powser);
int fd3;
while(1)
{
sync();
fd3=open(gpio2, O_RDONLY|O_SYNC|O_RSYNC|O_NOCTTY|O_NONBLOCK);
int ret=read(fd3,buffer,sizeof(buffer));
// fp=popen("cat /sys/class/gpio/gpio53/value","r");
// fgets(buffer,sizeof(buffer),fp);
printf(" bufffer=%s\n ",buffer);
// printf(" buf=%s\n ",buf);
if (strcmp(buffer,oldbuffer)==0)
{
continue;
}
else
{
if(buffer[0]=='1')
{
sleep(0.001);
int ret=read(fd3,buffer,sizeof(buffer));
if(buffer[0]=='1')
{
openlog("power status:",LOG_CONS|LOG_PID,LOG_LOCAL0);
syslog(LOG_ERR,"Power UP\n");
printf("Power UP\n");
}
}
else if(buffer[0]=='0')
{
printf("Power DOWN\n");
openlog("power status:",LOG_CONS|LOG_PID,LOG_LOCAL1);
syslog(LOG_ERR,"Power DOWN\n");
}
}
strcpy(oldbuffer,buffer);
sleep(0.001);
// pclose(fp);
close(fd3);
}
return 0;
}
结果读掉电对应的IO口文件,掉电的低电平read一直都不到,用命令cat可以读到对应的低电平,用什么办法可以使read也读到io口的低电平