0
我正在寫一個代碼和即時通訊使用libudev.h到目前爲止我可以檢測設備並打開它們並將開放設備的fd放在devlist中讀取和寫入數據。我的問題是,當我拔掉設備,我得到了一個分割錯誤。檢測設備插入和拔出
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);
}
一旦我得到deviced開我可以閱讀到它的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
謝謝,我得到它的工作。你回答的是什麼作品。大。真的很感激它。問題在於代碼閱讀。我刪除了我遇到麻煩和bwala工作的部分。再次感謝很多。 – demic0de
我很高興有幫助! –