Link to home
Start Free TrialLog in
Avatar of echard
echard

asked on

Creating and checking for OS directories...

All

Simple question... Is there a standard C library of functions that I can use to see if a directory/file exists, and if not to create a directory at the OS level in a specified location? I assume that this liubrary would also have a function to remove directories...

I would prefer to not use the system() function call directly...

Thanks in advance...

echard
Avatar of akshayxx
akshayxx
Flag of United States of America image

which platform u working on .. let us know, to give you precise solution
there can be a minor difference between windows and UNIX..
here is a function that is available on linux/Unix for checking the existence of file
(for further information do this "man 2 access")
--------------
#include <unistd.h>

       int access(const char *pathname, int mode);

DESCRIPTION
       access  checks  whether      the  process  would be allowed to
       read, write or test for existence of the       file  (or  other
       file  system  object) whose name is pathname.  If pathname
       is a symbolic link permissions of the file referred to  by
       this symbolic link are tested.
-----------------------------------
to know how to create the file/directory . look this

man 2 open  OR man 2 creat  (create without 'e')
---------

NAME
       open, creat - open and possibly create a file or device

SYNOPSIS
       #include <sys/types.h>
       #include <sys/stat.h>
       #include <fcntl.h>

       int open(const char *pathname, int flags);
       int open(const char *pathname, int flags, mode_t mode);
       int creat(const char *pathname, mode_t mode);

DESCRIPTION
       The  open() system call is used to convert a pathname into
       a file descriptor (a small, non-negative integer       for  use
       in  subsequent  I/O  as with read, write, etc.).       When the
       call is successful, the file descriptor returned       will  be
       the lowest file descriptor not currently open for the pro-
       cess.  This call creates a new open file, not shared  with
       any  other  process.  (But shared open files may arise via
       the fork(2) system call.)  The new file descriptor is  set
       to  remain open across exec functions (see fcntl(2)).  The
       file offset is set to the beginning of the file.

       The parameter flags is one of O_RDONLY, O_WRONLY or O_RDWR
       which  request  opening      the file read-only, write-only or
       read/write, respectively, bitwise-or'd with zero       or  more
       of the following:

       O_CREAT
            If the file does not exist it will be created.  The
            owner (user ID) of the file is set to the effective
            user  ID of the process. The group ownership (group
            ID) is set either to the effective group ID of  the
            process  or to the group ID of the parent directory
            (depending on filesystem type  and  mount       options,
            and  the      mode  of the parent directory, see, e.g.,
            the mount options bsdgroups and sysvgroups  of  the
            ext2 filesystem, as described in mount(8)).

       O_EXCL When  used with O_CREAT, if the file already exists
            it is an error and the open will fail. In this con-
            text,  a      symbolic link exists, regardless of where
            its points to.  O_EXCL is broken on NFS  file  sys-
            tems,  programs  which  rely  on      it for performing
            locking tasks will contain a race       condition.   The
            solution for performing atomic file locking using a
            lockfile is to create a unique file on the same  fs
            (e.g., incorporating hostname and pid), use link(2)
            to make a link to the lockfile. If  link()  returns
            0,  the lock is successful.  Otherwise, use stat(2)
            on the unique file to check if its link  count  has
            increased to 2, in which case the lock is also suc-
            cessful.

       O_NOCTTY
            If pathname refers to  a      terminal  device  --  see
            tty(4) -- it will not become the process's control-
            ling terminal even if the       process  does      not  have
            one.

       O_TRUNC
            If  the  file  already exists and is a regular file
            and the open mode allows writing (i.e.,  is  O_RDWR
            or  O_WRONLY) it will be truncated to length 0.  If
            the file is a FIFO or  terminal  device  file,  the
            O_TRUNC  flag  is       ignored. Otherwise the effect of
            O_TRUNC is unspecified.  (On many Linux versions it
            will  be      ignored; on other versions it will return
            an error.)

       O_APPEND
            The file is opened  in  append  mode.  Before  each
            write, the file pointer is positioned at the end of
            the file, as if with lseek.  O_APPEND may       lead  to
            corrupted       files      on  NFS file systems if more than
            one process appends data to a file at  once.   This
            is  because  NFS      does  not  support appending to a
            file, so the client  kernel  has      to  simulate  it,
            which can't be done without a race condition.

       O_NONBLOCK or O_NDELAY
            When  possible,  the file is opened in non-blocking
            mode. Neither the open nor  any  subsequent  opera-
            tions on the file descriptor which is returned will
            cause the calling process to wait.   For      the  han-
            dling  of       FIFOs      (named      pipes), see also fifo(4).
            This mode need not have any effect on  files  other
            than FIFOs.

       O_SYNC The  file is opened for synchronous I/O. Any writes
            on the resulting file  descriptor       will  block  the
            calling  process until the data has been physically
            written to the underlying hardware.   See       RESTRIC-
            TIONS below, though.

       O_NOFOLLOW
            If  pathname  is      a  symbolic  link,  then the open
            fails.  This is  a  FreeBSD  extension,  which  was
            added  to Linux in version 2.1.126.  Symbolic links
            in earlier components of the pathname will still be
            followed.       The headers from glibc 2.0.100 and later
            include a definition of this flag;  kernels  before
            2.1.126 will ignore it if used.

       O_DIRECTORY
            If  pathname  is not a directory, cause the open to
            fail.  This flag is Linux-specific, and  was  added
            in  kernel version 2.1.126, to avoid denial-of-ser-
            vice problems if opendir(3) is called on a FIFO  or
            tape  device, but should not be used outside of the
            implementation of opendir.

       O_LARGEFILE
            On 32-bit systems that support the Large Files Sys-
            tem,  allow files whose sizes cannot be represented
            in 31 bits to be opened.

       Some of these optional flags can be  altered  using  fcntl
       after the file has been opened.

       The argument mode specifies the permissions to use in case
       a new file is created. It is  modified  by  the      process's
       umask  in  the  usual  way: the permissions of the created
       file are (mode  &  ~umask).   Note  that       this  mode  only
       applies      to future accesses of the newly created file; the
       open call that creates a read-only file may well return      a
       read/write file descriptor.

       The following symbolic constants are provided for mode:

       S_IRWXU
            00700 user (file owner) has read, write and execute
            permission

       S_IRUSR (S_IREAD)
            00400 user has read permission

       S_IWUSR (S_IWRITE)
            00200 user has write permission

       S_IXUSR (S_IEXEC)
            00100 user has execute permission

       S_IRWXG
            00070 group has read, write and execute permission

       S_IRGRP
            00040 group has read permission

       S_IWGRP
            00020 group has write permission

       S_IXGRP
            00010 group has execute permission

       S_IRWXO
            00007 others have read, write and       execute  permis-
            sion

       S_IROTH
            00004 others have read permission

       S_IWOTH
            00002 others have write permisson

       S_IXOTH
            00001 others have execute permission

       mode  should  always  be       specified when O_CREAT is in the
       flags, and is ignored otherwise.

       creat  is  equivalent  to  open      with   flags   equal   to
       O_CREAT|O_WRONLY|O_TRUNC.
------------------
Avatar of echard
echard

ASKER

I am terribly sorry for not specifying the OS.. I am developing this on Solaris platform...
ASKER CERTIFIED SOLUTION
Avatar of akshayxx
akshayxx
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Solaris also has similar functions. try out the manual pages that i have mentioned and let us know if it works for you..
Nothing has happened on this question in over 10 months. It's time for cleanup!

My recommendation, which I will post in the Cleanup topic area, is to
accept answer by akshayxx [grade B] (missed mkdir/rmdir, should not reproduce whole manpages).

PLEASE DO NOT ACCEPT THIS COMMENT AS AN ANSWER!

jmcg
EE Cleanup Volunteer