The API that allows us to change the permissions of an IFS object is called "chmod", which stands for "change mode". Here's the C-language prototype for chmod(), along with my RPG equivalent:
int chmod(const char *path, mode_t mode) D chmod PR 10I 0 ExtProc('chmod') D path * Value options(*string) D mode 10U 0 Value
The "mode" parameter works exactly the same as the "mode" parameter on the open() API. You use the same bit-flags to assign permissions to the "owner", the "group" and "others".
The difference between chmod() and open() is that chmod() does not open or create a new file, but instead changes the access permissions on an existing IFS object.
For example, let's say that you had already run the example program from chapter 2 called "CH2RAWDTA", and you know that it wrote an object to disk called "littlepgm.com". But now, you decided that you didn't want Bill from Accounting to be able to download your program! Since it's already there, you'd want to remove "read" permissions from the object.
To do that, you'd do something like this:
c if chmod('/ifstest/littlepgm.com': c S_IRUSR + S_IWUSR + S_IXUSR) < 0 c callp EscErrno(errno) c endif
We assigned Read, Write and Execute authority to the file's owner, but we gave no authority to "the group" or to "others", so, Bill won't be able to read it.