Operating Systems 2019F Lecture 4: Difference between revisions
Created page with "==Video== Video from the lecture given on Sept. 11, 2019 [https://homeostasis.scs.carleton.ca/~soma/os-2019f/lectures/comp3000-2019f-lec03-20190911.m4v is now available]. ==..." |
No edit summary |
||
Line 1: | Line 1: | ||
==Video== | ==Video== | ||
Video from the lecture given on Sept. | Video from the lecture given on Sept. 13, 2019 [https://homeostasis.scs.carleton.ca/~soma/os-2019f/lectures/comp3000-2019f-lec04-20190913.m4v is now available]. | ||
==Topics== | ==Topics== |
Revision as of 21:53, 13 September 2019
Video
Video from the lecture given on Sept. 13, 2019 is now available.
Topics
- supervisor and user mode
- system calls
- process abstraction
Notes
Lecture 4 --------- Topics * files * open, read, write, close system calls * I/O redirection * command line arguments * programmatic directory access What can you do with a file normally? * open it <--- why? * read from * write to * close it <--- why? By having open and close, we tell the OS that - we're going to do multiple operations on this file, and - save the mapping of the filename to the underlying file data - do permission checks now, not when we access the file When you open a file, you get a file descriptor (a small int)
Code
filetest.c
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
int main(int argc, char *argv[], char *envp)
{
int fd;
char *msg = "Hello world!\n";
char *stdmsg = "Hello standard out!\n";
write(1, stdmsg, 20);
/* open a file */
fd = open("test.txt", O_CREAT|O_APPEND|O_WRONLY,
S_IRUSR|S_IWUSR);
printf("Got file descriptor %d\n", fd);
/* write something to the file */
write(fd, msg, 13);
/* close the file */
close(fd);
return 0;
}
dirtest.c
#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
int main(int argc, char *argv[], char *envp[])
{
DIR *d;
struct dirent *entry;
if (argc > 1) {
d = opendir(argv[1]);
} else {
d = opendir(".");
}
entry = readdir(d);
while (entry) {
printf("Entry: %s\n", entry->d_name);
entry = readdir(d);
}
closedir(d);
return 0;
}