Reputation: 640
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?
Upvotes: 9
Views: 10687
Reputation: 830
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;
}
}
Upvotes: 11
Reputation: 640
Yes it works, cheers.
#include <unistd.h>
#include <stdbool.h>
bool is_folder_writable(char* str) {
if(access(str, W_OK) == 0) {
return true;
} else {
return false;
}
}
Upvotes: 7