Dans mon programme, je state les fichiers qu'ils veulent et j'envoie les données. Les champs d'une stat struct
sont tous les types spéciaux:Comment utiliser printf pour afficher off_t, nlink_t, size_t et d'autres types spéciaux?
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 */
};
Le code correspondant à ma question suivante:
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);
Comment puis-je imprimer ces types de manière portable et efficace? Au début, je l'ai fait sans moulage en devinant les spécificateurs de format correctes. En plus d'être une habitude de programmation ennuyeuse, cela signifiait aussi que mon code ne fonctionnerait pas sur un système 32 bits. Maintenant, avec les moulages, cela semble fonctionner, mais sur combien de plates-formes?
spécifique pour clock_t: http://stackoverflow.com/questions/1083142/what-s-the-correct-way-to-use-printf-to-print-a-clock-t –
Pour '__uint128': http://stackoverflow.com/questions/11656241/how-to-print-uint128-t-number-using-gcc –