124 lines
3.0 KiB
C++
124 lines
3.0 KiB
C++
// Copyright (C) 2004 Davis E. King (davis@dlib.net)
|
|
// License: Boost Software License See LICENSE.txt for the full license.
|
|
#ifndef DLIB_MISC_API_KERNEL_2_CPp_
|
|
#define DLIB_MISC_API_KERNEL_2_CPp_
|
|
#include "../platform.h"
|
|
|
|
#ifdef POSIX
|
|
|
|
#include <unistd.h>
|
|
#include "misc_api_kernel_2.h"
|
|
#include <sys/time.h>
|
|
#include <sys/stat.h>
|
|
#include <sys/types.h>
|
|
#include <errno.h>
|
|
|
|
namespace dlib
|
|
{
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
void sleep (
|
|
unsigned long milliseconds
|
|
)
|
|
{
|
|
// in HP-UX you can only usleep for less than a second
|
|
#ifdef HPUX
|
|
if (milliseconds >= 1000)
|
|
{
|
|
::sleep(milliseconds/1000);
|
|
unsigned long remaining = milliseconds%1000;
|
|
if (remaining > 0)
|
|
::usleep(remaining*1000);
|
|
}
|
|
else
|
|
{
|
|
::usleep(milliseconds*1000);
|
|
}
|
|
#else
|
|
::usleep(milliseconds*1000);
|
|
#endif
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
std::string get_current_dir (
|
|
)
|
|
{
|
|
char buf[1024];
|
|
if (getcwd(buf,sizeof(buf)) == 0)
|
|
{
|
|
return std::string();
|
|
}
|
|
else
|
|
{
|
|
return std::string(buf);
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
void set_current_dir (
|
|
const std::string& new_dir
|
|
)
|
|
{
|
|
if (chdir(new_dir.c_str()))
|
|
{
|
|
throw set_current_dir_error("Error changing current dir to '" + new_dir + "'");
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
uint64 timestamper::
|
|
get_timestamp (
|
|
) const
|
|
{
|
|
uint64 ts;
|
|
timeval curtime;
|
|
gettimeofday(&curtime,0);
|
|
|
|
ts = curtime.tv_sec;
|
|
ts *= 1000000;
|
|
ts += curtime.tv_usec;
|
|
return ts;
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
void create_directory (
|
|
const std::string& dir
|
|
)
|
|
{
|
|
if (mkdir(dir.c_str(),0777))
|
|
{
|
|
// an error has occurred
|
|
if (errno == EEXIST)
|
|
{
|
|
struct stat buffer;
|
|
// now check that this is actually a valid directory
|
|
if (::stat(dir.c_str(),&buffer))
|
|
{
|
|
// the directory was not found
|
|
throw dir_create_error(dir);
|
|
}
|
|
else if (S_ISDIR(buffer.st_mode) == 0)
|
|
{
|
|
// It is not a directory
|
|
throw dir_create_error(dir);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
throw dir_create_error(dir);
|
|
}
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
}
|
|
|
|
#endif // POSIX
|
|
|
|
#endif // DLIB_MISC_API_KERNEL_2_CPp_
|
|
|