/** @file test.c
*
* A small example of daemon code. It forks off
* a child process, while the parent exits immediately.
*
* @todo Close file descriptors in the child.
*/
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
/** Parameters to be passed to the daemon. */
struct params {
pid_t pid;
unsigned sleeptime;
};
/** Functionality of the child process.
*
* This is the main function of the daemon. Fill in the
* daemon functionality in this function.
*
* Any parameters that have to be passed to the daemon
* are collected in the params struct.
*/
void childfunc (struct params *params)
{
sleep(params->sleeptime);
printf("Child has stopped.\n"); }
int main (int argc, char* argv[])
{
struct params params;
params.sleeptime = 3;
if ( (params.pid = fork()) < 0) {
return 1;
} else if (params.pid > 0) {
printf("child forked with PID %d and will sleep for %u seconds.\n", params.
pid, params.
sleeptime); } else {
childfunc(¶ms);
}
return 0;
}
LyoqIEBmaWxlIHRlc3QuYwogKgogKiBBIHNtYWxsIGV4YW1wbGUgb2YgZGFlbW9uIGNvZGUuICBJdCBmb3JrcyBvZmYKICogYSBjaGlsZCBwcm9jZXNzLCB3aGlsZSB0aGUgcGFyZW50IGV4aXRzIGltbWVkaWF0ZWx5LgogKgogKiBAdG9kbyBDbG9zZSBmaWxlIGRlc2NyaXB0b3JzIGluIHRoZSBjaGlsZC4KICovCgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8dW5pc3RkLmg+CiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KCgovKiogUGFyYW1ldGVycyB0byBiZSBwYXNzZWQgdG8gdGhlIGRhZW1vbi4gKi8Kc3RydWN0IHBhcmFtcyB7CiAgIHBpZF90IHBpZDsKICAgdW5zaWduZWQgc2xlZXB0aW1lOwp9OwoKLyoqIEZ1bmN0aW9uYWxpdHkgb2YgdGhlIGNoaWxkIHByb2Nlc3MuCiAqCiAqIFRoaXMgaXMgdGhlIG1haW4gZnVuY3Rpb24gb2YgdGhlIGRhZW1vbi4gIEZpbGwgaW4gdGhlCiAqIGRhZW1vbiBmdW5jdGlvbmFsaXR5IGluIHRoaXMgZnVuY3Rpb24uCiAqCiAqIEFueSBwYXJhbWV0ZXJzIHRoYXQgaGF2ZSB0byBiZSBwYXNzZWQgdG8gdGhlIGRhZW1vbgogKiBhcmUgY29sbGVjdGVkIGluIHRoZSBwYXJhbXMgc3RydWN0LgogKi8Kdm9pZCBjaGlsZGZ1bmMgKHN0cnVjdCBwYXJhbXMgKnBhcmFtcykKewogICAgc2xlZXAocGFyYW1zLT5zbGVlcHRpbWUpOwogICAgcHJpbnRmKCJDaGlsZCBoYXMgc3RvcHBlZC5cbiIpOwp9CgppbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKewogICAgc3RydWN0IHBhcmFtcyBwYXJhbXM7CgogICAgcHJpbnRmKCJQYXJlbnQgc3RhcnRlZDogIik7CiAgICBwYXJhbXMuc2xlZXB0aW1lID0gMzsKICAgIGlmICggKHBhcmFtcy5waWQgPSBmb3JrKCkpIDwgMCkgewogICAgICAgIHByaW50ZigiZm9yayBmYWlsZWQ6ICVtIVxuIik7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9IGVsc2UgaWYgKHBhcmFtcy5waWQgPiAwKSB7CiAgICAgICAgcHJpbnRmKCJjaGlsZCBmb3JrZWQgd2l0aCBQSUQgJWQgYW5kIHdpbGwgc2xlZXAgZm9yICV1IHNlY29uZHMuXG4iLCBwYXJhbXMucGlkLCBwYXJhbXMuc2xlZXB0aW1lKTsKICAgIH0gZWxzZSB7CiAgICAgICAgY2hpbGRmdW5jKCZwYXJhbXMpOwogICAgfQoKICAgIHJldHVybiAwOwp9CgoK