Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check if a folder is writable

I'm writing an simple file server using sockets for an assignment. Before I start accepting connections I need to check that the server can write to the requested directory it serves from.

One simple way of doing this would simply be to try create a file and then delete it straight afterwards and error if that failed. But what if the file already exists? My program crashes or gets closed in-between? Along with the fact it seems a bit messy and isn't elegant.

Strictly speaking the code only needs to work for an Ubuntu system the markers test it on. So I could do a stat() command, get the current uid and gid and check the permissions manually against the file status. But I'd rather do this in a portable fashion and this is laborous..

Is there a simple C standard way of doing this?

like image 467
Callum Avatar asked Oct 25 '13 20:10

Callum


1 Answers

You could use access from <uninstd.h>. I don't know if it's part of the standard, but it is more convenient than stat, I would say.

#include <errno.h>
#include <unistd.h>
#include <iostream>

int main(int argc, char** argv)
{
    int result = access("/root/", W_OK);
    if (result == 0)
    {
        std::cout << "Can W_OK" << std::endl;
    }
    else
    {
        std::cout << "Can't W_OK: " << result << std::endl;
    }
}
like image 154
Jmc Avatar answered Oct 17 '22 07:10

Jmc