1da2e3ebdSchin /*********************************************************************** 2da2e3ebdSchin * * 3da2e3ebdSchin * This software is part of the ast package * 4*7c2fbfb3SApril Chin * Copyright (c) 1992-2008 AT&T Intellectual Property * 5da2e3ebdSchin * and is licensed under the * 6da2e3ebdSchin * Common Public License, Version 1.0 * 7*7c2fbfb3SApril Chin * by AT&T Intellectual Property * 8da2e3ebdSchin * * 9da2e3ebdSchin * A copy of the License is available at * 10da2e3ebdSchin * http://www.opensource.org/licenses/cpl1.0.txt * 11da2e3ebdSchin * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * 12da2e3ebdSchin * * 13da2e3ebdSchin * Information and Software Systems Research * 14da2e3ebdSchin * AT&T Research * 15da2e3ebdSchin * Florham Park NJ * 16da2e3ebdSchin * * 17da2e3ebdSchin * Glenn Fowler <gsf@research.att.com> * 18da2e3ebdSchin * David Korn <dgk@research.att.com> * 19da2e3ebdSchin * * 20da2e3ebdSchin ***********************************************************************/ 21da2e3ebdSchin #pragma prototyped 22da2e3ebdSchin /* 23da2e3ebdSchin * David Korn 24da2e3ebdSchin * Glenn Fowler 25da2e3ebdSchin * AT&T Research 26da2e3ebdSchin */ 27da2e3ebdSchin 28da2e3ebdSchin static const char usage[] = 29da2e3ebdSchin "[-?\n@(#)$Id: sync (AT&T Research) 2006-10-04 $\n]" 30da2e3ebdSchin USAGE_LICENSE 31da2e3ebdSchin "[+NAME?sync - schedule file system updates]" 32da2e3ebdSchin "[+DESCRIPTION?\bsync\b calls \bsync\b(2), which causes all information " 33da2e3ebdSchin "in memory that updates file systems to be scheduled for writing out to " 34da2e3ebdSchin "all file systems. The writing, although scheduled, is not necessarily " 35da2e3ebdSchin "complete upon return from \bsync\b.]" 36da2e3ebdSchin "[+?Since \bsync\b(2) has no failure indication, \bsync\b only fails for " 37da2e3ebdSchin "option/operand syntax errors, or when \bsync\b(2) does not return, in " 38da2e3ebdSchin "which case \bsync\b also does not return.]" 39da2e3ebdSchin "[+?At minimum \bsync\b should be called before halting the system. Most " 40da2e3ebdSchin "systems provide graceful shutdown procedures that include \bsync\b -- " 41da2e3ebdSchin "use them if possible.]" 42da2e3ebdSchin "[+EXIT STATUS?]" 43da2e3ebdSchin "{" 44da2e3ebdSchin "[+0?\bsync\b(2) returned.]" 45da2e3ebdSchin "[+>0?Option/operand syntax error.]" 46da2e3ebdSchin "}" 47da2e3ebdSchin "[+SEE ALSO?\bsync\b(2), \bshutdown\b(8)]" 48da2e3ebdSchin ; 49da2e3ebdSchin 50da2e3ebdSchin #include <cmd.h> 51da2e3ebdSchin #include <ls.h> 52da2e3ebdSchin 53da2e3ebdSchin int 54da2e3ebdSchin b_sync(int argc, char** argv, void* context) 55da2e3ebdSchin { 56da2e3ebdSchin cmdinit(argc, argv, context, ERROR_CATALOG, 0); 57da2e3ebdSchin for (;;) 58da2e3ebdSchin { 59da2e3ebdSchin switch (optget(argv, usage)) 60da2e3ebdSchin { 61da2e3ebdSchin case ':': 62da2e3ebdSchin error(2, "%s", opt_info.arg); 63da2e3ebdSchin break; 64da2e3ebdSchin case '?': 65da2e3ebdSchin error(ERROR_usage(2), "%s", opt_info.arg); 66da2e3ebdSchin break; 67da2e3ebdSchin } 68da2e3ebdSchin break; 69da2e3ebdSchin } 70da2e3ebdSchin argv += opt_info.index; 71da2e3ebdSchin if (error_info.errors || *argv) 72da2e3ebdSchin error(ERROR_usage(2), "%s", optusage(NiL)); 73da2e3ebdSchin #if _lib_sync 74da2e3ebdSchin sync(); 75da2e3ebdSchin #else 76da2e3ebdSchin error(ERROR_usage(2), "failed -- the native system does not provide a sync(2) call"); 77da2e3ebdSchin #endif 78da2e3ebdSchin return 0; 79da2e3ebdSchin } 80