许多的Linux / x86-64的系统调用接受指针结构作为参数。
出于示例的第二参数stat(2)
是struct stat*
...
struct stat {
dev_t st_dev; /* ID of device containing file */
ino_t st_ino; /* inode number */
mode_t st_mode; /* protection */
nlink_t st_nlink; /* number of hard links */
uid_t st_uid; /* user ID of owner */
gid_t st_gid; /* group ID of owner */
dev_t st_rdev; /* device ID (if special file) */
off_t st_size; /* total size, in bytes */
blksize_t st_blksize; /* blocksize for file system I/O */
blkcnt_t st_blocks; /* number of 512B blocks allocated */
time_t st_atime; /* time of last access */
time_t st_mtime; /* time of last modification */
time_t st_ctime; /* time of last status change */
};
这意味着,如果你想比你必须了解每种类型有多大规则,是否有成员为了对准之间的任何填充,等等,从单纯组装调用系统调用。
是否C标准离开这个开放为(编译器)中所定义的实现或可以将它从标准(假设原始类型的尺寸是已知的)来确定
如果它处于打开状态,并在内核或x86-64架构,无论如何界定呢? 或只是其中的编译器发生的内核与编译的问题?
(即给定的结构我需要计算的起始相对该构件的偏移该结构的地址的一些部件)