diff options
Diffstat (limited to 'miscutils/update.c')
-rw-r--r-- | miscutils/update.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/miscutils/update.c b/miscutils/update.c new file mode 100644 index 0000000..f3b7fc0 --- /dev/null +++ b/miscutils/update.c @@ -0,0 +1,48 @@ +#include "internal.h" +#include <linux/unistd.h> + +const char update_usage[] = "update\n" +"\n" +"\tFlush buffered data to the disk devices every 30 seconds.\n"; + +#if defined(__GLIBC__) +#include <sys/kdaemon.h> +#else +_syscall2(int, bdflush, int, func, int, data); +#endif /* __GLIBC__ */ + +extern int +update_main(struct FileInfo * i, int argc, char * * argv) +{ + /* + * Update is actually two daemons, bdflush and update. + */ + int pid; + + pid = fork(); + if ( pid < 0 ) + return pid; + else if ( pid == 0 ) { + /* + * This is no longer necessary since 1.3.5x, but it will harmlessly + * exit if that is the case. + */ + strcpy(argv[0], "bdflush (update)"); + argv[1] = 0; + argv[2] = 0; + bdflush(1, 0); + _exit(0); + } + pid = fork(); + if ( pid < 0 ) + return pid; + else if ( pid == 0 ) { + argv[0] = "update"; + for ( ; ; ) { + sync(); + sleep(30); + } + } + + return 0; +} |