feat: add streq and printErr
This commit is contained in:
1 parent
6184cf43be
commit
b4acf5d4d2
4 files changed
+203
No files matched your search
@@ -0,0 +1,56 @@
|
||||
#include "ulib.h"
|
||||
|
||||
/*
|
||||
* Drives the shared-pipe demo added this wave (pipeCreateDetached/
|
||||
* pipeAddReader/pipeAddWriter, pipe.h; vfsPipeCreateHandle/vfsPipeAttach,
|
||||
* vfs.h; sysRead/sysWrite's retry-the-syscall path, syscall.c): creates one
|
||||
* detached pipe handle and hands it to two INDEPENDENTLY spawned processes
|
||||
* as a decimal argv string (decToString/parseDec, ulib.c) rather than a
|
||||
* shared fd -- frostbyte has no fork(), so a raw pipe.h handle number is
|
||||
* the only thing two unrelated processes can rendezvous on. fifowriter.c
|
||||
* deliberately sleeps before writing, so fiforeader.c's read() genuinely
|
||||
* has to block across several timer ticks and be woken later, not just win
|
||||
* a scheduling race against an already-full buffer -- see fifowriter.c/
|
||||
* fiforeader.c for how each end proves that on its own side.
|
||||
*/
|
||||
|
||||
int main(void)
|
||||
{
|
||||
print("fifomaster: start, pid=");
|
||||
printDec(userGetpid());
|
||||
print("\n");
|
||||
|
||||
long handle = userPipeCreate();
|
||||
if (handle < 0) {
|
||||
print("fifomaster: FAIL pipe create\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
char handleStr[24];
|
||||
decToString(handle, handleStr);
|
||||
|
||||
char* readerArgv[] = { "/bin/fiforeader", handleStr, 0 };
|
||||
long readerPid = userSpawn("/bin/fiforeader", readerArgv);
|
||||
if (readerPid < 0) {
|
||||
print("fifomaster: FAIL spawn fiforeader\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
char* writerArgv[] = { "/bin/fifowriter", handleStr, 0 };
|
||||
long writerPid = userSpawn("/bin/fifowriter", writerArgv);
|
||||
if (writerPid < 0) {
|
||||
print("fifomaster: FAIL spawn fifowriter\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
long readerStatus = userWait(readerPid);
|
||||
long writerStatus = userWait(writerPid);
|
||||
|
||||
if (readerStatus != 0 || writerStatus != 0) {
|
||||
print("fifomaster: FAIL reader or writer reported failure\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
print("fifomaster: pipeshare ok\n");
|
||||
return 0;
|
||||
}
|
||||
Reference in new issue
Block a user