1/* vi: set sw=4 ts=4: */ 2/* 3 * readahead implementation for busybox 4 * 5 * Preloads the given files in RAM, to reduce access time. 6 * Does this by calling the readahead(2) system call. 7 * 8 * Copyright (C) 2006 Michael Opdenacker <michael@free-electrons.com> 9 * 10 * Licensed under GPLv2 or later, see file LICENSE in this source tree. 11 */ 12//config:config READAHEAD 13//config: bool "readahead (1.5 kb)" 14//config: default y 15//config: depends on LFS 16//config: select PLATFORM_LINUX 17//config: help 18//config: Preload the files listed on the command line into RAM cache so that 19//config: subsequent reads on these files will not block on disk I/O. 20//config: 21//config: This applet just calls the readahead(2) system call on each file. 22//config: It is mainly useful in system startup scripts to preload files 23//config: or executables before they are used. When used at the right time 24//config: (in particular when a CPU bound process is running) it can 25//config: significantly speed up system startup. 26//config: 27//config: As readahead(2) blocks until each file has been read, it is best to 28//config: run this applet as a background job. 29 30//applet:IF_READAHEAD(APPLET(readahead, BB_DIR_USR_SBIN, BB_SUID_DROP)) 31 32//kbuild:lib-$(CONFIG_READAHEAD) += readahead.o 33 34//usage:#define readahead_trivial_usage 35//usage: "[FILE]..." 36//usage:#define readahead_full_usage "\n\n" 37//usage: "Preload FILEs to RAM" 38 39#include "libbb.h" 40 41int readahead_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 42int readahead_main(int argc UNUSED_PARAM, char **argv) 43{ 44 int retval = EXIT_SUCCESS; 45 46 if (!argv[1]) { 47 bb_show_usage(); 48 } 49 50 while (*++argv) { 51 int fd = open_or_warn(*argv, O_RDONLY); 52 if (fd >= 0) { 53 off_t len; 54 int r; 55 56 /* fdlength was reported to be unreliable - use seek */ 57 len = xlseek(fd, 0, SEEK_END); 58 xlseek(fd, 0, SEEK_SET); 59 r = readahead(fd, 0, len); 60 close(fd); 61 if (r >= 0) 62 continue; 63 } 64 retval = EXIT_FAILURE; 65 } 66 67 return retval; 68} 69