У меня есть программа C, как показано ниже. Я не знаю, что использовать stat64 вместо stat как в Solaris, так и в HP-AIX. Я хочу создать эту программу как на Solaris, так и на HP-AIX.
#include "zunx.h"
#include <nls.h>
/*
* NAME: zunx_file_exists
*
* PURPOSE: Checks if a file exists.
*
* INVOCATION: boolean zunx_file_exists(name)
* char *name;
*
* INPUTS: name - file to check
*
* OUTPUTS: TRUE or FALSE
*
* DESCRIPTION: zunx_file_exists does a stat on the specified file,
* and returns TRUE if a stat is found. No check is
* made to determine what type of file it is.
*/
boolean zunx_file_exists
(const char *buf)
{
#if defined(UNIX)
struct stat fstat;
if (buf != NULL && stat(I2E1(buf), &fstat) == 0)
return TRUE;
else
return FALSE;
#endif
#ifdef NT_OS
struct _stat64 fstat;
if (buf != NULL && _stat64((char *) I2E1(buf), &fstat) == 0)
return TRUE;
else
return FALSE;
#endif
}
Я наткнулся на макрос в Solaris, например:
#ifdef UNIX
#define _FILE_OFFSET_BITS 64
#endif
правильно ли это определение для вышеуказанной программы?
для HP-AIX используется макрос _LARGE_FILES
.
но я не знаю, как определить этот макрос в приведенной выше программе, чтобы он успешно работал на обеих ОС.
Пожалуйста, предложите несколько идей.
UNIX
илиNT_OS
? - person SKD   schedule 23.02.2016stat64()
должен быть всегда доступен вместе с обычнымstat()
: они существуют специально для облегчения 64-битного интерфейса для 32-битных приложений. - person Dummy00001   schedule 23.02.2016FILE
в Solaris полностью непрозрачна, поэтому код, который зависит от доступа к конкретной реализацииFILE
, необходимо будет исправить. Несколько ссылок на соответствующую документацию: google.com/search ?q=solaris+64-bit+FILE+is+opaque - person Andrew Henle   schedule 23.02.2016HP-AIX
— это сокращение от HP-UX и AIX? - person Jdamian   schedule 21.06.2016