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?
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;
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With