-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathfile.cpp
101 lines (83 loc) · 2.13 KB
/
file.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include "faasm/faasm.h"
#include <cerrno>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <unistd.h>
#define FILE_CONTENTS "blah blah blah"
#define BUFFER_SIZE 15
FILE* openFile(const char* fileName, const char* mode)
{
FILE* fptr;
fptr = fopen(fileName, mode);
if (fptr == nullptr) {
printf("Failed to open %s: %i (%s)", fileName, errno, strerror(errno));
exit(1);
}
return fptr;
}
void deleteFile(const char* fileName)
{
// Delete file if it exists
if (access(fileName, F_OK) != -1) {
int removeRes = remove(fileName);
if (removeRes != 0) {
printf("Failed to remove %s: %i (%s)\n",
fileName,
errno,
strerror(errno));
exit(1);
};
}
}
void checkFileContents(const char* fileName)
{
char buffer[BUFFER_SIZE];
FILE* fA2 = openFile(fileName, "r");
char* getsRes = fgets(buffer, BUFFER_SIZE, fA2);
if (getsRes == nullptr) {
printf("fgets failed\n");
exit(1);
}
if (getsRes != buffer) {
printf("getsRes %p != buffer %p\n", getsRes, buffer);
exit(1);
}
if (strcmp(buffer, FILE_CONTENTS) != 0) {
printf(
"Read in contents not as expected (actual=\"%s\" expected=\"%s\"\n)",
buffer,
FILE_CONTENTS);
exit(1);
}
}
int main(int argc, char* argv[])
{
const char* fileA = "dummy_file.txt";
const char* fileB = "other_dummy_file.txt";
// Initial delete
deleteFile(fileA);
deleteFile(fileB);
// Open and write data
FILE* fA1 = openFile(fileA, "w");
fprintf(fA1, "%s\n", FILE_CONTENTS);
fclose(fA1);
// Check file
checkFileContents(fileA);
// Rename file
int renameRes = rename(fileA, fileB);
if (renameRes != 0) {
printf("Rename failed (from=%s to %s, %i (%s))",
fileA,
fileB,
errno,
strerror(errno));
exit(1);
}
// Check renamed file contents
checkFileContents(fileB);
// Delete again
deleteFile(fileA);
deleteFile(fileB);
return 0;
}