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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
<pre>
<font color="#0000ff">// Copyright (c) 2003 David Muse</font>
<font color="#0000ff">// See the file COPYING for more information</font>
<font color="#a020f0">#include </font><font color="#ff00ff"><rudiments/groupentry.h></font>
<font color="#a020f0">#include </font><font color="#ff00ff"><rudiments/passwdentry.h></font>
<font color="#a020f0">#include </font><font color="#ff00ff"><rudiments/file.h></font>
<font color="#a020f0">#include </font><font color="#ff00ff"><rudiments/permissions.h></font>
<font color="#a020f0">#include </font><font color="#ff00ff"><rudiments/datetime.h></font>
<font color="#a020f0">#include </font><font color="#ff00ff"><stdio.h></font>
<font color="#a020f0">#ifdef RUDIMENTS_NAMESPACE</font>
<font color="#a52a2a"><b>using</b></font> <font color="#2e8b57"><b>namespace</b></font> rudiments;
<font color="#a020f0">#endif</font>
<font color="#2e8b57"><b>int</b></font> main(<font color="#2e8b57"><b>int</b></font> argc, <font color="#2e8b57"><b>const</b></font> <font color="#2e8b57"><b>char</b></font> **argv) {
<font color="#0000ff">// remove the file (in case it already exists)</font>
file::remove(<font color="#ff00ff">"testfile"</font>);
<font color="#0000ff">// create a new file called "testfile" with rw-rw---- permissions</font>
<font color="#0000ff">// and initial contents "hello"</font>
file fl;
fl.create(<font color="#ff00ff">"testfile"</font>,permissions::evalPermString(<font color="#ff00ff">"rw-rw----"</font>),<font color="#ff00ff">"hello"</font>);
printf(<font color="#ff00ff">"testfile:</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>);
<font color="#0000ff">// check for existence</font>
<font color="#a52a2a"><b>if</b></font> (file::exists(<font color="#ff00ff">"testfile"</font>)) {
printf(<font color="#ff00ff">" exists</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>);
} <font color="#a52a2a"><b>else</b></font> {
printf(<font color="#ff00ff">" does not exist</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>);
}
<font color="#0000ff">// display the permissions of the file</font>
mode_t mode=fl.getPermissions();
printf(<font color="#ff00ff">" permissions: </font><font color="#6a5acd">%s</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>,permissions::evalPermOctal(mode));
<font color="#0000ff">// display the name of the user that owns the file</font>
uid_t uid=fl.getOwnerUserId();
<font color="#2e8b57"><b>char</b></font> *username;
passwdentry::getName(uid,&username);
printf(<font color="#ff00ff">" user : </font><font color="#6a5acd">%s</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>,username);
<font color="#a52a2a"><b>delete</b></font>[] username;
<font color="#0000ff">// display the name of the group that owns the file</font>
gid_t gid=fl.getOwnerGroupId();
<font color="#2e8b57"><b>char</b></font> *groupname;
groupentry::getName(gid,&groupname);
printf(<font color="#ff00ff">" group : </font><font color="#6a5acd">%s</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>,groupname);
<font color="#a52a2a"><b>delete</b></font>[] groupname;
<font color="#0000ff">// display the size of the file in bytes</font>
off64_t size=fl.getSize();
printf(<font color="#ff00ff">" size : </font><font color="#6a5acd">%ld</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>,size);
<font color="#0000ff">// display the size of the file in blocks</font>
blkcnt_t blocks=fl.getBlockCount();
printf(<font color="#ff00ff">" blocks : </font><font color="#6a5acd">%ld</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>,blocks);
<font color="#0000ff">// display the file type</font>
printf(<font color="#ff00ff">" is a socket: </font><font color="#6a5acd">%d</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>,fl.isSocket());
printf(<font color="#ff00ff">" is a symlink: </font><font color="#6a5acd">%d</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>,fl.isSymbolicLink());
printf(<font color="#ff00ff">" is a regular file: </font><font color="#6a5acd">%d</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>,fl.isRegularFile());
printf(<font color="#ff00ff">" is a block device: </font><font color="#6a5acd">%d</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>,fl.isBlockDevice());
printf(<font color="#ff00ff">" is a directory: </font><font color="#6a5acd">%d</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>,fl.isDirectory());
printf(<font color="#ff00ff">" is a character device: </font><font color="#6a5acd">%d</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>,fl.isCharacterDevice());
printf(<font color="#ff00ff">" is a fifo: </font><font color="#6a5acd">%d</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>,fl.isFifo());
<font color="#0000ff">// display the last time the file was accessed</font>
<font color="#2e8b57"><b>time_t</b></font> atime=fl.getLastAccessTime();
<font color="#2e8b57"><b>char</b></font> *atimestr=datetime::getString(atime);
printf(<font color="#ff00ff">" last access : </font><font color="#6a5acd">%s</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>,atimestr);
<font color="#a52a2a"><b>delete</b></font>[] atimestr;
<font color="#0000ff">// display the last time the file was modified</font>
<font color="#2e8b57"><b>time_t</b></font> mtime=fl.getLastModificationTime();
<font color="#2e8b57"><b>char</b></font> *mtimestr=datetime::getString(mtime);
printf(<font color="#ff00ff">" last modification: </font><font color="#6a5acd">%s</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>,mtimestr);
<font color="#a52a2a"><b>delete</b></font>[] mtimestr;
<font color="#0000ff">// display the last time the file was changed</font>
<font color="#2e8b57"><b>time_t</b></font> ctime=fl.getLastChangeTime();
<font color="#2e8b57"><b>char</b></font> *ctimestr=datetime::getString(ctime);
printf(<font color="#ff00ff">" last change : </font><font color="#6a5acd">%s</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>,ctimestr);
<font color="#a52a2a"><b>delete</b></font>[] ctimestr;
<font color="#0000ff">// display the device that the file resides on</font>
dev_t dev=fl.getDevice();
printf(<font color="#ff00ff">" device : </font><font color="#6a5acd">%d</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>,dev);
<font color="#0000ff">// display the type of the device that the file resides on</font>
dev_t devtype=fl.getDeviceType();
printf(<font color="#ff00ff">" device type : </font><font color="#6a5acd">%d</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>,devtype);
<font color="#0000ff">// display the file's first inode</font>
ino_t inode=fl.getInode();
printf(<font color="#ff00ff">" inode : </font><font color="#6a5acd">%d</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>,inode);
<font color="#0000ff">// display the number of hard links to the file</font>
nlink_t nlink=fl.getNumberOfHardLinks();
printf(<font color="#ff00ff">" hard links : </font><font color="#6a5acd">%ld</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>,nlink);
<font color="#2e8b57"><b>char</b></font> *path=<font color="#ff00ff">"/usr/local/firstworks/include/rudiments/file.h"</font>;
<font color="#2e8b57"><b>char</b></font> *dirname=file::dirname(path);
printf(<font color="#ff00ff">"dirname(</font><font color="#6a5acd">%s</font><font color="#ff00ff">)=</font><font color="#6a5acd">%s</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>,path,dirname);
<font color="#a52a2a"><b>delete</b></font>[] dirname;
<font color="#2e8b57"><b>char</b></font> *basename=file::basename(path);
printf(<font color="#ff00ff">"basename(</font><font color="#6a5acd">%s</font><font color="#ff00ff">)=</font><font color="#6a5acd">%s</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>,path,basename);
<font color="#a52a2a"><b>delete</b></font>[] basename;
basename=file::basename(path,<font color="#ff00ff">".h"</font>);
printf(<font color="#ff00ff">"basename(</font><font color="#6a5acd">%s</font><font color="#ff00ff">,</font><font color="#6a5acd">\"</font><font color="#ff00ff">.h</font><font color="#6a5acd">\"</font><font color="#ff00ff">)=</font><font color="#6a5acd">%s</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>,path,basename);
<font color="#a52a2a"><b>delete</b></font>[] basename;
printf(<font color="#ff00ff">"key=</font><font color="#6a5acd">%d</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>,file::generateKey(<font color="#ff00ff">"/"</font>,<font color="#ff00ff">1</font>));
printf(<font color="#ff00ff">"maxLinks(</font><font color="#6a5acd">%s</font><font color="#ff00ff">)=</font><font color="#6a5acd">%d</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>,path,file::maxLinks(path));
printf(<font color="#ff00ff">"canChangeOwner(</font><font color="#6a5acd">%s</font><font color="#ff00ff">)=</font><font color="#6a5acd">%d</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>,path,file::canChangeOwner(path));
}
</pre>
|