Skip to content
Snippets Groups Projects
Commit aca246a6 authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

Add -2 (open second descriptor) and -t (second thread) options

Order of options no longer matters.
parent c0528559
No related branches found
No related tags found
No related merge requests found
Pipeline #7453 passed
#include "filewrap.h"
#include "threadwrap.h"
#include <stdlib.h>
#include <string.h>
int access_ = O_RDWR;
void child(void* arg)
{
char* path = (char*)arg;
printf("Opening in child thread: ");
int fd = open(path, access_, DEFFILEMODE);
if(fd < 0)
perror(path);
else {
printf("Success\n");
printf("close(%s) = %d\n", path, close(fd));
}
}
int main(int argc, char** argv)
{
int access = O_RDWR;
char* share = "NWA";
bool try_all = true;
bool loop = false;
bool rm = false;
bool second = false;
bool thread = false;
if(argc < 2) {
printf("usage: sopenfile [-r] [-l] <path/filename> [share-mode]\n");
printf("usage: sopenfile [-opts] <path/filename> [share-mode]\n");
printf("\n");
printf("-r open file read-only instead of read/write\n");
printf("-c open file with create permissions\n");
printf("-2 open and close a second descriptor\n");
printf("-t open and close a second descriptor in a second thread\n");
printf("-R remove file after open\n");
printf("-l loop until failure\n");
printf("\n");
......@@ -24,21 +44,21 @@ int main(int argc, char** argv)
return EXIT_SUCCESS;
}
int argn = 1;
if(strcmp(argv[argn], "-r") == 0) {
access = O_RDONLY;
++argn;
}
if(strcmp(argv[argn], "-c") == 0) {
access |= O_CREAT;
++argv;
}
if(strcmp(argv[argn], "-R") == 0) {
rm = true;
++argn;
}
if(strcmp(argv[argn], "-l") == 0) {
for(; argn < argc; ++argn) {
if(strcmp(argv[argn], "-r") == 0)
access_ = O_RDONLY;
else if(strcmp(argv[argn], "-c") == 0)
access_ |= O_CREAT;
else if(strcmp(argv[argn], "-2") == 0)
second = true;
else if(strcmp(argv[argn], "-t") == 0)
thread = true;
else if(strcmp(argv[argn], "-l") == 0)
loop = true;
++argn;
else if(strcmp(argv[argn], "-R") == 0)
rm = true;
else
break;
}
const char* path = argv[argn++];
if(argc > argn) {
......@@ -65,11 +85,23 @@ int main(int argc, char** argv)
return EXIT_FAILURE;
}
fprintf(stderr, "%s Deny-%c (share mode %x): ", path, toupper(share_flag), share_mode);
int file = sopen(path, access, share_mode, DEFFILEMODE);
int file = sopen(path, access_, share_mode, DEFFILEMODE);
if(file < 0)
fprintf(stderr, "Error %d (%s)\n", errno, strerror(errno));
else {
printf("Success\n");
if(second) {
printf("Opening second descriptor: ");
int fd2 = open(path, access_, DEFFILEMODE);
if(fd2 < 0)
fprintf(stderr, "Error %d (%s)\n", errno, strerror(errno));
else {
printf("Success\n");
printf("close(%s) = %d\n", path, close(fd2));
}
}
if(thread)
_beginthread(child, 0, (void*)path);
if(rm)
printf("remove(%s) = %d\n", path, unlink(path));
if(!try_all) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment