cibertextron
Tengo el siguiente fragmento de código en un archivo llamado RaftLog.cc
:
#include <algorithm>
#include <fcntl.h>
#include <sys/stat.h>
namespace LogCabin {
namespace Server {
namespace RaftConsensusInternal {
namespace FilesystemUtil = Storage::FilesystemUtil;
namespace {
bool
fileToProto(const std::string& path, google::protobuf::Message& out)
{
int fd = open(path.c_str(), O_RDONLY);
if (fd == -1)
return false;
else
close(fd);
FilesystemUtil::FileContents file(path);
// more code down here, not useful to the problem.
Sin embargo, cuando compilo tengo:
build/Server/RaftLog.cc: In function ‘bool LogCabin::Server::RaftConsensusInternal::{anonymous}::fileToProto(const string&, google::protobuf::Message&)’:
build/Server/RaftLog.cc:43:17: error: ‘close’ was not declared in this scope
build/Server/RaftLog.cc: In function ‘void LogCabin::Server::RaftConsensusInternal::{anonymous}::protoToFile(google::protobuf::Message&, const string&)’:
build/Server/RaftLog.cc:76:13: error: ‘close’ was not declared in this scope
In file included from ./Server/RaftConsensus.h:17:0,
no se porque el close()
la función no se incluye en #include <fcntl.h>
. ¿Puede alguien por favor ayudarme? También déjame saber si debo incluir más código.
necesitas incluir unistd.h
archivo de encabezado si llama close
función
#include <unistd.h>
Usar fopen/fclose
, fdopen/close
par
-
¿Solo eso? también debo reemplazar
close
porfclose
?– cibertextrón
29 de enero de 2013 a las 3:17
-
Solo si también reemplazas
open
confopen
y reescriba el resto de su lógica para trabajar con unFILE*
– Halcón Oscuro
12 de enero de 2016 a las 0:29
-
Esto destaca una de mis liendres de larga data:
open
se define enfcntl.h
pero es “opuesto”close
se define enunistd.h
. Me pregunto qué tiene que decir la sección de “razones” de POSIX sobre esto.–Craig Estey
12 de enero de 2016 a las 0:34
-
@CraigEstey para mí esto tiene sentido, ya que
close
no tiene exactamente el efecto contrario deopen
.open
crea una descripción de archivo y un descriptor de archivo para un archivo. Mientrasclose
solo puede publicar el descriptor del archivo, pero no necesariamente la descripción del archivo. Básicamente,close
se puede usar con todos los descriptores de archivos (sockets, pipes, archivos) mientras queopen
es la función especializada para crear descriptores para archivos normales, al igual quesocket
ypipe
sería para sus respectivos archivos no regulares.– SpectreVert
20 de enero a las 17:12
En Visual Studio 2015
#include <corecrt_io.h>
parece funcionar!
-
La pregunta no mencionó VS.
– SpectreVert
20 de enero a las 17:07