libudev.h를 사용하여 코드 및 메신저를 작성하고 있습니다. 지금까지 장치를 감지하여 열 수 있고 열린 장치의 fd를 devlist에 넣어 데이터를 읽고 쓸 수 있습니까? 내 문제는 내가 장치를 뽑으면 나는 세분화 오류가 발생합니다. 내가 개방 deviced을 받으면장치 감지 및 연결 해제
if (FD_ISSET(fd, &fds))
{
dev = udev_monitor_receive_device(mon);
if (dev)
{
if(strcmp(udev_device_get_action(dev),"add")==0)
{
if(strcmp(udev_device_get_devnode(dev), "/dev/ttyUSB0")==0)
{
fd1 = open(udev_device_get_devnode(dev), O_RDWR | O_NONBLOCK);
if(fd1<0)
{
printf("Can't open Device\n");
exit(0);
}
}
printf("Device plugged\n");
printf(" Node: %s\n", udev_device_get_devnode(dev));
printf(" Action: %s\n", udev_device_get_action(dev));
printf("device opened\n");
int opt =1;
ioctl(fd1, FIONBIO,(char *) &opt);
for(loop=0; loop<MAXDEV; loop++)
if(devlist[loop] == 0)
{
devlist[loop] = fd1;
fd1 = -1;
}
}
else {
printf("Device unplugged\n");
printf(" Node: %s\n", udev_device_get_devnode(dev));
printf(" Action: %s\n", udev_device_get_action(dev));
FD_CLR(devlist[loop],&fds);
close(devlist[loop]);
devlist[loop] = -1;
}
udev_device_unref(dev);
}
나는 그것의 FD로 읽을 수 있고 아무 문제가 없다하지만 난 장치를 해제 한 때 나는 오류가 발생합니다.
이것은 내가 문제가있는 부분입니다.
printf("Device unplugged\n");
printf(" Node: %s\n", udev_device_get_devnode(dev));
printf(" Action: %s\n", udev_device_get_action(dev));
FD_CLR(devlist[loop],&fds);
close(devlist[loop]);
devlist[loop] = -1;
감사합니다 ..
감사합니다. 상단의 루프를 초기화했지만 코드를 포함하지 않았습니다. 돌아올거야 -1. – demic0de
감사합니다. 당신이 대답 한 것은 효과가 있습니다. 큰. 정말 감사합니다. 문제는 코드를 읽는 것입니다. 나는 문제가있는 부분을 제거하고 그것이 효과가 있다고 믿는다. 다시 한번 고마워. – demic0de
도와 주셔서 기쁩니다! –