2010-01-19 4 views
2

J'utilise appel sur AIX fonction statvfs. Et en utilisant le compilateur GCC. Je voudrais que l'appel de statvfs se résolve en statvfs64 par le préprocesseur. Ex: Sous Solaris, en utilisant les indicateurs "-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS = 64" avec gcc, je suis résolu en statvfs64.gcc option pour obtenir statvfs64

Pourriez-vous s'il vous plaît aider à obtenir les drapeaux similaires sur AIX qui me décide de statvfs64 de statvfs.

Merci & Cordialement, Sivaram T

Répondre

0

Je ne disposent pas d'un système AIX, donc je ne peux pas vous dire les drapeaux à définir. Cependant, sur Solaris, vous pouvez voir sys/statvfs.h et voir comment cela fonctionne, chercher statvfs64 par exemple et recherchez les blocs #ifdef qui l'entourent. Vous verrez les lignes

#if defined(_LARGEFILE64_SOURCE) 
    typedef struct statvfs64 { 
    ..... 
    } statvfs64_t; 
#endif 

#if !defined(_LP64) && _FILE_OFFSET_BITS == 64 
... 
#define statvfs_t    statvfs64_t 
#define statvfs     statvfs64 
#define fstatvfs    fstatvfs64 
#endif 

Vous serez en mesure de faire exactement la même chose sur AIX. Toutefois, AIX peut se comporter différemment et ne pas utiliser le pré-processeur pour basculer entre les versions 32 bits et 64 bits.

Si ce n'est pas évident pour vous, alors vous pouvez poster le contenu de sys/statvfs.h ici et nous pouvons jeter un coup d'oeil pour vous.

0

IIRC sur AIX vous avez besoin du jeton _LARGE_FILES jeu, ce qui permettra un soutien de fichiers grand implicite.

-D_LARGE_FILES 

Si vous voulez appeler statvfs64 explicittly, vous devez faire

-D_LARGE_FILE_API 
+0

Salut, j'ai essayé "-D_LARGE_FILES" et options "-D_LARGE_FILE_API", pas de chance. – Thumbeti

2

Merci beaucoup pour une réponse immédiate. Malheureusement, il n'y a pas de définir « _LARGEFILE64_SOURCE » sous AIX incluent le fichier. Je viens de connaître les options suivantes "-maix64 -mpowerpc64" peut résoudre le statvfs64. Je ne sais pas si elles sont bonnes à utiliser ou non.

S'il vous plaît trouver le fichier sys/statvfs.h suivants

================================ =================

#ifndef _H_STATVFS 
#define _H_STATVFS 

#ifndef _H_STANDARDS 
#include <standards.h> 
#endif 

#if _XOPEN_SOURCE_EXTENDED==1 

#include <strict_stdtypes.h> 

#ifndef _H_TYPES 
#include <sys/types.h> 
#endif 

#include <end_strict_stdtypes.h> 

#define _FSTYPSIZ  16 

#ifdef _ALL_SOURCE 
#include <sys/vmount.h> 

#define FSTYPSIZ  _FSTYPSIZ 
#endif 

/* 
* statvfs system call return structure 
*/ 

struct statvfs { 
    ulong_t f_bsize;  /* preferred file system block size   */ 
    ulong_t f_frsize; /* fundamental file system block size  */ 
    fsblkcnt_t f_blocks; /* total # of blocks of f_frsize in fs  */ 
    fsblkcnt_t f_bfree;  /* total # of free blocks     */ 
    fsblkcnt_t f_bavail; /* # of blocks available to non super user */ 
    fsfilcnt_t f_files;  /* total # of file nodes (inode in JFS)  */ 
    fsfilcnt_t f_ffree;  /* total # of free file nodes    */ 
    fsfilcnt_t f_favail; /* # of nodes available to non super user */ 
#ifdef _ALL_SOURCE 
    fsid_t  f_fsid;  /* file system id       */ 
#else 
    ulong_t f_fsid;  /* file system id       */ 
#ifndef __64BIT__ 
    ulong_t f_fstype; /* file system type       */ 
#endif 
#endif /* _ALL_SOURCE */ 
    char  f_basetype[_FSTYPSIZ]; /* Filesystem type name (eg. jfs) */ 
    ulong_t f_flag;  /* bit mask of flags       */ 
    ulong_t f_namemax; /* maximum filename length     */ 
    char  f_fstr[32]; /* filesystem-specific string */ 
    ulong_t f_filler[16];/* reserved for future use     */ 
}; 

#define ST_NOSUID  0x0040   /* don't maintain SUID capability */ 

#define ST_RDONLY  0x0001   /* file system mounted read only  */ 
#define ST_NODEV  0x0080   /* don't allow device access across */ 
            /* this mount      */ 

/* 
* Prototypes 
*/ 
#ifdef _NO_PROTO 
extern int statvfs(); 
extern int fstatvfs(); 
#else 
extern int statvfs(const char *__restrict__, struct statvfs *__restrict__); 
extern int fstatvfs(int, struct statvfs *); 
#endif 

/* 
* statvfs64 system call return structure 
*/ 
#ifdef _ALL_SOURCE 

struct statvfs64 { 
    blksize64_t f_bsize; /* preferred file system block size   */ 
    blksize64_t f_frsize; /* fundamental file system block size  */ 
    blkcnt64_t f_blocks; /* total # of blocks of f_frsize in fs  */ 
    blkcnt64_t f_bfree;  /* total # of free blocks     */ 
    blkcnt64_t f_bavail; /* # of blocks available to non super user */ 
    blkcnt64_t f_files;  /* total # of file nodes (inode in JFS)  */ 
    blkcnt64_t f_ffree;  /* total # of free file nodes    */ 
    blkcnt64_t f_favail; /* # of nodes available to non super user */ 
    fsid64_t f_fsid;  /* file system id       */ 
    char  f_basetype[FSTYPSIZ]; /* Filesystem type name (eg. jfs) */ 
    ulong_t f_flag;  /* bit mask of flags       */ 
    ulong_t f_namemax; /* maximum filename length     */ 
    char  f_fstr[32]; /* filesystem-specific string */ 
    ulong_t f_filler[16];/* reserved for future use     */ 
}; 

/* 
* Prototypes 
*/ 
#ifdef _NO_PROTO 
extern int statvfs64(); 
extern int fstatvfs64(); 
#else 
extern int statvfs64(const char *__restrict__, struct statvfs64 *__restrict__); 
extern int fstatvfs64(int, struct statvfs64 *); 
#endif 

#endif /* _ALL_SOURCE */ 

#endif /* _XOPEN_SOURCE_EXTENDED */ 
#endif /* _H_STATVFS */ 

========================== =======================

+0

Veuillez accepter cette réponse si elle a résolu votre problème. Ironiquement, je l'ai trouvé en cherchant quelque chose de similaire, pas à travers un drapeau :) –

Questions connexes