У меня есть программа C, как показано ниже. Мне нечего использовать stat64 вместо stat в обоих Solaris & HP-AIX. Я хочу создать эту программу на обоих Solaris & HP-AIX.Как определить макрос _FILE_OFFSET_BITS & _LARGE_FILES для 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'? – SKD
IME, самый простой способ - скомпилировать приложение как 64 бит. Флаги «LARGE_FILES»/etc предназначены только для 32-битных приложений. В противном случае IIRC 'stat64()' должен быть всегда доступен вместе с обычным 'stat()': они существуют специально для облегчения использования 64-битного интерфейса для 32-битных приложений. – Dummy00001
Вы можете использовать опцию -D для определения макроса при компиляции. Я также предлагаю проверить это. http://stackoverflow.com/questions/4357570/use-file-offset64-vs-file-offset-bits-64 –