C에서 4GiB보다 큰 파일을 사용하기 위해 fseeko
함수를 GCC 컴파일러와 함께 사용하려고합니다. 이제 모든 것이 작동하고 파일을 사용할 수 있습니다. 4GiB 이상이지만 GCC는 fseeko
함수가 암시 적으로 선언되었다고 불평합니다. 난 아무데도 내가이 경고를 해결하기 위해 포함해야 어떤 헤더를 찾을 수 없습니다함수의 암시 적 선언
#define __USE_LARGEFILE64
#define _LARGEFILE_SOURCE
#define _LARGEFILE64_SOURCE
#include "MemoryAllocator.h"
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <sys/stat.h>
typedef struct BlockReader {
char* fileName;
// Total filesize of the file with name fileName in bytes.
unsigned long long fileSize;
// Size of one block in bytes.
unsigned int blockSize;
// Defines which block was last read.
unsigned int block;
// Defines the total amount of blocks
unsigned int blocks;
} BlockReader;
unsigned char* blockreader_read_raw_block(BlockReader* reader, long startPos, unsigned int length, size_t* readLength) {
FILE* file = fopen(reader->fileName, "rb");
unsigned char* buffer = (unsigned char*) mem_alloc(sizeof(unsigned char) * (length + 1));
FSEEK(file, startPos, 0);
fclose(file);
// Terminate buffer
buffer[length] = '\0';
return buffer;
}
이이 메시지를 생성하는 소스 코드의 최소한의 작업 예입니다. GCC가 제공 정확한 경고가 이것이다 :
src/BlockReader.c: In function ‘blockreader_read_block’:
src/BlockReader.c:80:2: warning: implicit declaration of function ‘fseeko’ [-Wimplicit-function-declaration]
FSEEK(file, reader->blockSize * reader->block, 0);
'fseeko'는 표준 C가 아닌 Posix에 있습니다 – deamentiaemundi
'MemoryAllocator.h'는 mem_alloc (x)을 malloc (x)로 정의하고 FSEEK를 fseeko로 가정하면이 프로그램은 POSIX 플랫폼에서 정상적으로 컴파일됩니다. 그러나 Windows에서 빌드하려고하면 작동하지 않습니다. – NickStoughton
사용중인 컴파일러 명령 줄은 정확히 무엇입니까? 헤더를 넣기 전에'_XOPEN_SOURCE' 또는'_POSIX_C_SOURCE'를 적절한 값으로 설정 했습니까? –