Использование чтения с inotify

Я изучал вызов inotify, но все еще немного нестабилен, когда дело касается интерфейса чтения. Это наиболее важные ресурсы, которые я смог найти относительно того, как правильно взаимодействовать с inotify с помощью read (2):

Они оба реализуют его одинаково, сначала они определяют следующее sizes:

#define EVENT_SIZE  ( sizeof (struct inotify_event) )
#define BUF_LEN     ( 1024 * ( EVENT_SIZE + 16 )

И затем они используют их следующим образом:

length = read( fd, buffer, BUF_LEN );  

if ( length < 0 ) {
    perror( "read" );
}  

while ( i < length ) {
    struct inotify_event *event = ( struct inotify_event * ) &buffer[ i ];
    /* some processing */
    i += EVENT_SIZE + event->len;
}

Теперь мы знаем, что name является частью struct inotify_event и имеет переменную длину. Итак, нельзя ли обрезать последнее событие inotify_event в буфере?

Предположим, что существует 1023 события inotify_event с путем 16 байтов и одно с путем 32 байта. Что тогда будет? Будет ли позднее усечено? Или ядро ​​увидит, что оно не помещается в буфер, и оставит все это целиком?

14
задан alexisdm 3 September 2012 в 00:54
поделиться