Userland: Add syscall -l option and man page
This commit is contained in:
parent
b6eba388e3
commit
cb4e51a7a5
Notes:
sideshowbarker
2024-07-19 10:42:36 +09:00
Author: https://github.com/mauri870 Commit: https://github.com/SerenityOS/serenity/commit/cb4e51a7a58 Pull-request: https://github.com/SerenityOS/serenity/pull/910 Reviewed-by: https://github.com/bugaevc
2 changed files with 71 additions and 4 deletions
62
Base/usr/share/man/man1/syscall.md
Normal file
62
Base/usr/share/man/man1/syscall.md
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
## Name
|
||||||
|
|
||||||
|
syscall - test a system call
|
||||||
|
|
||||||
|
## Synopsis
|
||||||
|
|
||||||
|
```**sh
|
||||||
|
$ syscall [-o] [-l] [-h] <syscall-name> <args...> [buf==BUFSIZ buffer]`
|
||||||
|
```
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
The `syscall` utility can be used to invoke a system call with the given arguments.
|
||||||
|
|
||||||
|
## Options
|
||||||
|
|
||||||
|
* `-o`: Output the contents of the buffer argument specified as buf to stdout.
|
||||||
|
* `-l`: Print a space separated list of all the Serenity system calls and exit. Note that not all the system calls can be invoked using this tool.
|
||||||
|
* `-h`: Print a help message and exit.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
Write a string to standard output:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ syscall write 1 hello 5
|
||||||
|
```
|
||||||
|
|
||||||
|
Read a string from the standard input into a buffer and output the buffer contents to stdout:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ syscall -o read 0 buf 3
|
||||||
|
```
|
||||||
|
|
||||||
|
Get the pid of the current running process:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ syscall getpid
|
||||||
|
```
|
||||||
|
|
||||||
|
Sleep for 3 seconds:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ syscall sleep 3
|
||||||
|
```
|
||||||
|
|
||||||
|
Create a directory:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ syscall mkdir my-dir 0755
|
||||||
|
```
|
||||||
|
|
||||||
|
Exit the program with status 2:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ syscall exit 2
|
||||||
|
```
|
||||||
|
|
||||||
|
## History
|
||||||
|
|
||||||
|
This is a direct port of a utility with the same name originated from the Plan 9 operating system.
|
||||||
|
|
|
@ -29,16 +29,21 @@ int main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
int oflag;
|
int oflag;
|
||||||
int opt;
|
int opt;
|
||||||
while ((opt = getopt(argc, argv, "oh")) != -1) {
|
while ((opt = getopt(argc, argv, "olh")) != -1) {
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
case 'o':
|
case 'o':
|
||||||
oflag = 1;
|
oflag = 1;
|
||||||
break;
|
break;
|
||||||
|
case 'l':
|
||||||
|
for (auto sc : syscall_table) {
|
||||||
|
fprintf(stdout, "%s ", Syscall::to_string(sc));
|
||||||
|
}
|
||||||
|
return EXIT_SUCCESS;
|
||||||
case 'h':
|
case 'h':
|
||||||
fprintf(stderr, "usage: \tsyscall [-o] entry [args; buf==BUFSIZ buffer]\n");
|
fprintf(stderr, "usage: \tsyscall [-o] [-l] [-h] <syscall-name> <args...> [buf==BUFSIZ buffer]\n");
|
||||||
fprintf(stderr, "\tsyscall write 1 hello 5\n");
|
fprintf(stderr, "\tsyscall write 1 hello 5\n");
|
||||||
fprintf(stderr, "\tsyscall -o read 0 buf 5\n");
|
fprintf(stderr, "\tsyscall -o read 0 buf 5\n");
|
||||||
fprintf(stderr, "\tsyscall -o getcwd buf 100\n");
|
fprintf(stderr, "\tsyscall sleep 3\n");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
|
@ -61,7 +66,7 @@ int main(int argc, char** argv)
|
||||||
perror("syscall");
|
perror("syscall");
|
||||||
} else {
|
} else {
|
||||||
if (oflag)
|
if (oflag)
|
||||||
printf("%s", buf);
|
fwrite(buf, 1, sizeof(buf), stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(stderr, "Syscall return: %d\n", rc);
|
fprintf(stderr, "Syscall return: %d\n", rc);
|
||||||
|
|
Loading…
Add table
Reference in a new issue