Once upon a very long time ago (way before even I started programming in C, which is over 30 years ago), the member names of structure elements had to be unique across all structures in a program — instead of 'per structure tag' as the requirement is now, and has been since the days of K&R — The C Programming Language 1st Edition, by Kernighan & Ritchie, 1978.

As a consequence, in those days, the prefix helped segregate the members of one structure type from every other structure type. Consequently, the habit grew of using such prefixes, and it continues with more recently developed structure types. The struct stat dates back to the days of the old system; struct iovec is a more recent invention (maybe sometime in the 1980s) which followed the old tradition.

Using prefixes does no harm. It could be marginally helpful. If you see gadzooks.st_mtime , you don't need to hunt the definition of gadzooks to guess with high confidence that it is of type struct stat .

Incidentally, you can find an early version of 'The C Reference Manual' as part of the Unix 7th Edition manuals (Unix Programmer's Manual Volume 2A) which says (§8.5 on p244, emphasis added):

The names of structure members and structure tags may be the same as ordinary variables, since a distinction can be made by context. However, names of tags and members must be distinct. The same member name can appear in different structures only if the two members are of the same type and if their origin with respect to their structure is the same; thus separate structures can share a common initial segment.