📄 autosd.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/select.h>
#include <sys/time.h>
#include <sys/wait.h>
#include <sys/stat.h>
#include <string.h>
#include <signal.h>
#include <sys/param.h>
#include <errno.h>
//#define DEBUG
static int deamon_init(void)//鍒涘缓甯搁┗杩涚▼
{
pid_t pid;
int i;
int maxopen;
if((pid = fork())<0){
printf("fork error \n");
exit(-1);
}
if (pid != 0)
exit(0);
setsid();
//chdir("/tmp");
umask(0);
maxopen = sysconf(_SC_OPEN_MAX);
if (maxopen <0){
printf("sysconf error !\n");
exit(-2);
}
for (i=0; i<maxopen; i++)
close(i);
return 0;
}
int main()
{
static char flag=0;
int sddev;
int i;
char buf[1]={0};
#ifndef DEBUG
if (deamon_init() != 0)
exit(-1);
#endif
mknod("/dev/gpio_g10", S_IFCHR, 0xfc00);
sddev = open("/dev/gpio_g10",O_RDONLY);
if ( sddev == -1 )
{
printf("Cann't open file \n");
exit(0);
}
for (;;)
{
fd_set rds;
int ret;
FD_ZERO(&rds);
FD_SET(sddev, &rds);
/*使用系统调用select检查是否能够从/dev/gpio_g10设备读取数据*/
ret = select(sddev + 1, &rds, NULL, NULL, NULL);
/*读取出错则退出程序*/
if (ret < 0)
{
perror("select");
exit(1);
}
if (ret == 0)
{
printf("Timeout.\n");
}
/*能够读取到数据*/
else if (FD_ISSET(sddev, &rds))
{
int ret = read(sddev, &buf, 1);
if(ret<0)
}
}
/*while(1)
{
sleep(1);
read(testdev,buf,1);
if(buf[0]==0 && flag==0)
{
system("./sdinmod");
flag=1;
}
if(buf[0]==1 && flag==1)
{
system("./sdunmod");
flag=0;
}
}*/
close(sddev);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -