Issue
For my OS class I'm supposed to implement Linux's cat using only system calls (no printf)
Reading rel="noreferrer">this reference I found it being used to print to a file. I guess I should manipulate ofstream.
In the example appears: ofstream outfile ("new.txt",ofstream::binary);
How can I make it write to the screen?
EDIT: I realized this write() is part of iostream library, is this the same as the int write (int fd, char *buf , int size) system call?
Solution
No, std::ostream::write
is not the same as the write
system call. It does (almost certainly) use the write
system call, at least on a system like Linux that has such a thing, and it normally does pretty similar things, but it's still a separate thing of its own.
Linux will, however, pre-open standard input, standard output and standard error streams for your process. To write to the screen, you'd normally use write
(i.e., the one that is a system call) to write to stream number 1
or stream number 2
(which are standard output and standard error respectively).
If you need to write to the screen even if those are re-directed, you'd normally open a stream to /dev/tty
and (again) use write
to write to it:
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main() {
char msg[] = "hello\n";
int fd = open("/dev/tty", O_WRONLY);
write(fd, msg, sizeof(msg));
return 0;
}
Answered By - Jerry Coffin Answer Checked By - Senaida (WPSolving Volunteer)