⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lib.pl

📁 linux 操作系统下对系统资源监控程序的编写
💻 PL
字号:
#!/usr/bin/perl$[ = 1;			# set array base to 1$, = ' ';		# set output field separator$\ = "\n";		# set output record separatorsub toupper {    local($_) = @_;    tr/a-z/A-Z/;    return $_;}sub tolower {    local($_) = @_;    tr/A-Z/a-z/;    return $_;}print '/* lib.c */';print "/* This is a generated file.  Please modify `lib.pl' */";print '';print '#include <config.h>';print '';print '#include <glibtop.h>';print '#include <glibtop/open.h>';print '';print '#include <glibtop/sysdeps.h>';print '#include <glibtop/union.h>';print '#include "libgtop-i18n.h"';print '';print '#include <glibtop/command.h>';print '';print '/* Some required fields are missing. */';print '';print 'static void';print '_glibtop_missing_feature (glibtop *server, const char *feature,';print "\t\t\t  const guint64 present, guint64 *required)";print '{';print "\tguint64 old_required = *required;\n";print "\t/* Return if we have all required fields. */";print "\tif ((~present & old_required) == 0)";print "\t\treturn;\n";print "\tswitch (server->error_method) {";print "\tcase GLIBTOP_ERROR_METHOD_WARN_ONCE:";print "\t\t*required &= present;";print "\tcase GLIBTOP_ERROR_METHOD_WARN:";print "\t\tglibtop_warn_r (server,";print "\t\t\t\t_(\"glibtop_get_%s (): Client requested \"";print "\t\t\t\t  \"field mask %05lx, but only have %05lx.\"),";print "\t\t\t\t feature, (unsigned long) old_required,";print "\t\t\t\t (unsigned long) present);";print "\t\tbreak;";print "\tcase GLIBTOP_ERROR_METHOD_ABORT:";print "\t\tglibtop_error_r (server,";print "\t\t\t\t _(\"glibtop_get_%s (): Client requested \"";print "\t\t\t\t  \"field mask %05lx, but only have %05lx.\"),";print "\t\t\t\t feature, (unsigned long) old_required,";print "\t\t\t\t (unsigned long) present);";print "\t\tbreak;";print "\t}";print '}';print '';print '/* Library functions. */';print '';$convert{'long'} = 'int64_t';$convert{'ulong'} = 'guint64';$convert{'pid_t'} = 'pid_t';$convert{'int'} = 'int';$convert{'ushort'} = 'unsigned short';$convert{'unsigned'} = 'unsigned';while (<>) {    chop;	# strip record separator    if (/^[^#]/) {	&output($_);    }}sub output {    local($line) = @_;    @line_fields = split(/\|/, $line, 9999);    $retval = $line_fields[1];    $feature = $line_fields[2];    $param_def = $line_fields[4];    $orig = $feature;    $feature =~ s/^@//;    $space = $feature;    $space =~ s/./ /g;    print $retval;    if ($retval !~ /^void$/) {	$prefix = 'retval = ';	$prefix_space = '         ';    }    else {	$prefix = '';	$prefix_space = '';    }    if ($param_def eq 'string') {	$call_param = ', ' . $line_fields[5];	$param_decl = ",\n            " . $space . '    const char *' .	  $line_fields[5];	$send_ptr = "\n\tconst void *send_ptr = " . $line_fields[5] . ';';	$send_size = "\n\tconst size_t send_size =\n\t\tstrlen (" .	  $line_fields[5] . ') + 1;';    }    else {	$call_param = '';	$param_decl = '';	$send_size = '';	$send_ptr = '';	$nr_params = (@params = split(/:/, $param_def, 9999));	for ($param = 1; $param <= $nr_params; $param++) {	    $list = $params[$param];	    $type = $params[$param];	    $type =~ s/\(.*//;	    $list =~ s/^.*\(//;	    $list =~ s/\)$//;	    $count = (@fields = split(/,/, $list, 9999));	    for ($field = 1; $field <= $count; $field++) {		if ($param_decl eq '') {		    $param_decl = ",\n            " . $space . '    ';		}		else {		    $param_decl = $param_decl . ', ';		}		$param_decl = $param_decl . '' . $convert{$type} . ' ' .		  $fields[$field];		$call_param = $call_param . ', ' . $fields[$field];		if ($send_ptr eq '') {		    $send_ptr = "\n\tconst void *send_ptr = &" .		      $fields[$field] . ';';		}		if ($send_size eq '') {		    $send_size = "\n\tconst size_t send_size =\n\t\t";		}		else {		    $send_size = $send_size . ' + ';		}		$send_size = $send_size . 'sizeof (' . $fields[$field] . ')';	    }	}	if ($send_size ne '') {	    $send_size = $send_size . ';';	}	else {	    $send_size = "\n\tconst size_t send_size = 0;";	}	if ($send_ptr eq '') {	    $send_ptr = "\n\tconst void *send_ptr = NULL;";	}    }    print 'glibtop_get_' . $feature . '_l (glibtop *server, glibtop_' .      $feature . ' *buf' . $param_decl . ')';    print '{' . $send_ptr . '' . $send_size;    if ($retval !~ /^void$/) {	print "\t" . $retval . ' retval = (' . $retval . ') 0;';    }    print '';    print "\tglibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_" .      &toupper($feature) . '), 0);';    print '';    print "\t/* If neccessary, we ask the server for the requested";    print "\t * feature. If not, we call the sysdeps function. */";    print '';    print "\tif ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&";    print "\t    (server->features & (1 << GLIBTOP_SYSDEPS_" .      &toupper($feature) . ')))';    print "\t{";    print "\t\t" . $prefix . 'glibtop_call_l (server, GLIBTOP_CMND_' .      &toupper($feature) . ',';    print "\t\t\t\t" . $prefix_space . 'send_size, send_ptr,';    print "\t\t\t\t" . $prefix_space . 'sizeof (glibtop_' . $feature .      '), buf);';    print "\t} else {";    if ($orig !~ /^@/) {	print '#if (!GLIBTOP_SUID_' . &toupper($feature) . ')';    }    print "\t\t" . $prefix . 'glibtop_get_' . $feature . '_s (server, buf' .      $call_param . ');';    if ($orig !~ /^@/) {	print '#else';	print "\t\terrno = ENOSYS;";	print "\t\tglibtop_error_io_r (server, \"glibtop_get_" . $feature .	  "\");";	print '#endif';    }    print "\t}";    print '';    print "\t/* Make sure that all required fields are present. */";    print '';    print "\tif (buf->flags & server->required." . $feature . ')';    print "\t\t_glibtop_missing_feature (server, \"" . $feature .      "\", buf->flags,";    print "\t\t\t\t\t  &server->required." . $feature . ');';    if ($retval !~ /^void$/) {	print "\n\t/* Now we can return. */";	print "\n\treturn retval;";    }    print '}';    print '';}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -