feat(userspace): add demo ring-3 programs

This commit is contained in:
dualfroz committed 2026-08-27 23:08:21 +02:00
1 parent b15dfc048a
commit d4bc2a209f
4 files changed
+135

No files matched your search

+18
View File
@@ -0,0 +1,18 @@
#include "ulib.h"
int main(void)
{
long pid = userGetpid();
for (int step = 0; step < 5; step++) {
print("counter: pid=");
printDec(pid);
print(" step=");
printDec(step);
print("\n");
userSleep(30);
}
print("counter: finished counting\n");
return 0;
}
+77
View File
@@ -0,0 +1,77 @@
#include "ulib.h"
#include "fs.h"
static const char* motdPath = "/etc/motd.txt";
static const char* notePath = "/tmp/note.txt";
int main(void)
{
print("fileread: start, pid=");
printDec(userGetpid());
print("\n");
FbStat st;
if (userStat(motdPath, &st) == 0) {
print("fileread: stat ");
print(motdPath);
print(" size=");
printDec((long)st.size);
print("\n");
} else {
print("fileread: stat failed\n");
}
int fd = (int)userOpen(motdPath, oReadOnly);
if (fd < 0) {
print("fileread: open failed\n");
return 1;
}
print("fileread: --- begin ");
print(motdPath);
print(" ---\n");
char buffer[128];
long n;
while ((n = userRead(fd, buffer, sizeof(buffer))) > 0)
userWrite(1, buffer, (unsigned long)n);
print("fileread: --- end ---\n");
userLseek(fd, 0, seekSet);
n = userRead(fd, buffer, 16);
print("fileread: lseek reread first bytes: ");
userWrite(1, buffer, (unsigned long)n);
print("\n");
userClose(fd);
int wfd = (int)userOpen(notePath, oReadWrite | oCreate | oTrunc);
if (wfd < 0) {
print("fileread: tmpfs open failed\n");
return 2;
}
const char* payload = "frostbyte-tmpfs-rw-ok\n";
userWrite(wfd, payload, stringLength(payload));
userLseek(wfd, 0, seekSet);
char readback[64];
long rn = userRead(wfd, readback, sizeof(readback));
print("fileread: tmpfs read back: ");
userWrite(1, readback, (unsigned long)rn);
userClose(wfd);
print("fileread: listing /etc via getdents:\n");
int dfd = (int)userOpen("/etc", oReadOnly);
if (dfd >= 0) {
FbDirent entries[8];
long bytes = userGetdents(dfd, entries, sizeof(entries));
long records = bytes / (long)sizeof(FbDirent);
for (long i = 0; i < records; i++) {
print(" ");
print(entries[i].name);
print(entries[i].type == fsTypeDir ? "/" : "");
print("\n");
}
userClose(dfd);
}
print("fileread: done\n");
return 0;
}
+13
View File
@@ -0,0 +1,13 @@
#include "ulib.h"
int main(void)
{
print("hello: greetings from ring 3, pid=");
printDec(userGetpid());
print("\n");
userYield();
print("hello: resumed after yield, exiting cleanly\n");
return 7;
}
+27
View File
@@ -0,0 +1,27 @@
#include "ulib.h"
#define blockBytes 8192
int main(void)
{
print("sbrktest: pid=");
printDec(userGetpid());
print(" requesting 8192 bytes via sbrk\n");
char* block = (char*)userSbrk(blockBytes);
for (int i = 0; i < blockBytes; i++)
block[i] = (char)(i & 0x7F);
int intact = 1;
for (int i = 0; i < blockBytes; i++)
if (block[i] != (char)(i & 0x7F))
intact = 0;
if (intact)
print("sbrktest: heap page write and read-back verified OK\n");
else
print("sbrktest: heap verification FAILED\n");
return 0;
}