请问一个pwrite函数的问题?
我在32位的linux下写了一个程序,程序代码如下:
#define _FILE_OFFSET_BITS 64
#define __USE_FILE_OFFSET64
#define __USE_LARGEFIILE64
#define _LARGEFILE64_SOURCE
#include <unistd.h>
#include <stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<errno.h>
int main()
{
	int fd;
	int count = 128;
	off_t offset = 0X80000000;
	int ret;
	char buf[1024]="hi ! this is pwrite.";
	char pathname[128] = "/tmp/1.txt";
	fd = open( pathname, O_WRONLY);
	printf("size of off_t is %d\n",sizeof(off_t));	
	if((ret = pwrite(fd, buf, count, offset))==-1)
	{
		printf("errno = %d\n",errno);
		printf("pwrite error\n");
		exit(1);
	}
	else
	{
		printf("pwrite success\n");
		printf("the writed data is:%s", buf);
	}	
	return 0;
}
但是pwrite函数返回-1,errorno是22,但是我把 0X80000000设为0X7fffffff,就很正常。请问这是什么原因?如何解决这个问题?谢谢!
------解决方案--------------------
某些条件下pwrite和pwrite64是一样的,如下红色
但是#if defined __USE_UNIX98 || defined __USE_XOPEN2K8这个条件不满足的话pwrite和pwrite64是不同的,pwrite只接收32位的off_t
#if defined __USE_UNIX98 || defined __USE_XOPEN2K8
# ifndef __USE_FILE_OFFSET64
/* Read NBYTES into BUF from FD at the given position OFFSET without
  changing the file pointer.  Return the number read, -1 for errors
  or 0 for EOF.
  This function is a cancellation point and therefore not marked with
  __THROW.  */
extern ssize_t pread (int __fd, void *__buf, size_t __nbytes,
                     __off_t __offset) __wur;
/* Write N bytes of BUF to FD at the given position OFFSET without
  changing the file pointer.  Return the number written, or -1.
  This function is a cancellation point and therefore not marked with
  __THROW.  */
extern ssize_t pwrite (int __fd, __const void *__buf, size_t __n,
                      __off_t __offset) __wur;
# else
#  ifdef __REDIRECT
extern ssize_t __REDIRECT (pread, (int __fd, void *__buf, size_t __nbytes,
                                  __off64_t __offset),
                          pread64) __wur;
extern ssize_t __REDIRECT (pwrite, (int __fd, __const void *__buf,
                                   size_t __nbytes, __off64_t __offset),
                          pwrite64) __wur;
#  else
#   define pread pread64
#   define pwrite pwrite64
#  endif
# endif