In meinem Programm, state ich die Dateien, die sie wollen und senden Sie die Daten über. Die Felder eines Stat struct
sind alle Sondertypen:Wie printf verwendet wird, um off_t, nlink_t, size_t und andere Sondertypen anzuzeigen?
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 */
};
Der entsprechende Code für meine Frage folgt:
len = snprintf(statbuf, STAT_BUFFER_SIZE,
"%crwxrwxrwx %lu %u %u %lld %s %s\r\n",
S_ISDIR(filestats.st_mode) ? 'd' : '-',
(unsigned long) filestats.st_nlink,
filestats.st_uid,
filestats.st_gid,
(unsigned long long) filestats.st_size,
date,
filename);
Wie drucke ich diese Art in einer tragbaren und effizienten Art und Weise? Zuerst habe ich es ohne Abgüsse gemacht, indem ich die korrekten Formatbezeichner erraten habe. Abgesehen davon, dass es eine lästige Programmiergewohnheit war, bedeutete dies auch, dass mein Code nicht auf einem 32-Bit-System funktionieren würde. Nun scheint es bei den Casts zu funktionieren, aber auf wie vielen Plattformen?
Spezifisch für clock_t: http://stackoverflow.com/questions/1083142/what-s-the-correct-way-to-use-printf-to-print-a-clock-t –
Für '__uint128': http://stackoverflow.com/questions/11656241/how-to-print-uint128-t-number-using-gcc –