sleep
cpp
#include "kernel/types.h"
#include "user/user.h"
int main(int argc, char *argv[])
{
if (argc < 2)
{
fprintf(2, "sleep: missing operand\n");
exit(1);
}
int ret = sleep(atoi(argv[1]));
if (ret == -1)
{
exit(1);
}
exit(0);
}
pingpong
cpp
#include "kernel/types.h"
#include "user/user.h"
int main(void)
{
int fd1[2];
int fd2[2];
int pid;
char buf[1] = {'a'};
pipe(fd1);
pipe(fd2);
pid = fork();
if (pid == 0)
{
close(fd1[0]);
close(fd2[1]);
write(fd1[1],buf,sizeof(buf));
printf("%d: received ping\n",getpid());
read(fd2[0],buf,sizeof(buf));
}
else
{
close(fd1[1]);
close(fd2[0]);
read(fd1[0],buf,sizeof(buf));
printf("%d: received pong\n",getpid());
write(fd2[1],buf,sizeof(buf));
}
exit(0);
}
primes
cpp
#include "kernel/types.h"
#include "user/user.h"
void prime(int fd)
{
int num;
if (read(fd, &num, 4) == 0)
{
close(fd);
return;
}
printf("prime %d\n", num);
int p[2];
pipe(p);
int pid = fork();
if (pid > 0)
{
close(p[0]);
int n;
while ((read(fd, &n, 4)) != 0)
{
if (n % num != 0)
{
write(p[1], &n, 4);
}
}
close(p[1]);
wait(0);
}
else
{
close(p[1]);
prime(p[0]);
}
}
int main(void)
{
int p[2];
pipe(p);
int pid = fork();
if (pid > 0)
{
close(p[0]);
for (int i = 2; i <= 35; i++)
{
write(p[1], &i, 4);
}
close(p[1]);
}
else
{
close(p[1]);
prime(p[0]);
}
exit(0);
}