mtk
Add <sys/kdaemon.h> header file to SYNOPSIS.
+sched_rr_get_interval.2
+ mtk
+ Moved timespec definition from SYNOPSIS into description.
+
select_tut.2
mtk
Make SYNOPSIS match select.2.
.nf
#include <stdio.h>
#include <errno.h>
-#include <linux/unistd.h> /* for _syscallX macros/related stuff */
-#include <linux/kernel.h> /* for struct sysinfo */
+#include <linux/unistd.h> /* for _syscallX macros/related stuff */
+#include <linux/kernel.h> /* for struct sysinfo */
_syscall1(int, sysinfo, struct sysinfo *, info);
.I msgp
argument is a pointer to caller-defined structure
of the following general form:
-.sp
-.B
- struct msgbuf {
-.br
-.B
- long mtype;
-/* message type, must be > 0 */
-.br
-.B
- char mtext[1];
-/* message data */
-.br
-.B
- };
-.sp
+.in +0.5i
+.nf
+
+struct msgbuf {
+ long mtype; /* message type, must be > 0 */
+ char mtext[1]; /* message data */
+};
+.fi
+.in -0.5i
+.PP
The
.I mtext
field is an array (or other structure) whose size is specified by
.sp
.RS
.nf
-.ta 4 13 24
siginfo_t {
- int si_signo; /* Signal number */
- int si_errno; /* An errno value */
- int si_code; /* Signal code */
- pid_t si_pid; /* Sending process ID */
- uid_t si_uid; /* Real user ID of sending process */
- int si_status; /* Exit value or signal */
- clock_t si_utime; /* User time consumed */
- clock_t si_stime; /* System time consumed */
- sigval_t si_value; /* Signal value */
- int si_int; /* POSIX.1b signal */
- void * si_ptr; /* POSIX.1b signal */
- void * si_addr; /* Memory location which caused fault */
- int si_band; /* Band event */
- int si_fd; /* File descriptor */
+ int si_signo; /* Signal number */
+ int si_errno; /* An errno value */
+ int si_code; /* Signal code */
+ pid_t si_pid; /* Sending process ID */
+ uid_t si_uid; /* Real user ID of sending process */
+ int si_status; /* Exit value or signal */
+ clock_t si_utime; /* User time consumed */
+ clock_t si_stime; /* System time consumed */
+ sigval_t si_value; /* Signal value */
+ int si_int; /* POSIX.1b signal */
+ void *si_ptr; /* POSIX.1b signal */
+ void *si_addr; /* Memory location which caused fault */
+ int si_band; /* Band event */
+ int si_fd; /* File descriptor */
}
.fi
.RE
if (res == NULL)
printf("'%s': unknown month\en", argv[i]);
else
- printf("%s: month #%d\en", res->name, res->nr);
+ printf("%s: month #%d\en", res->name, res->nr);
}
return 0;
}
the assignment
.RS
.nf
- environ = NULL;
+ environ = NULL;
.fi
.RE
will probably do.
/* Receive auxiliary data in msgh */
for (cmsg = CMSG_FIRSTHDR(&msgh);
- cmsg != NULL;
- cmsg = CMSG_NXTHDR(&msgh,cmsg)) {
- if (cmsg->cmsg_level == IPPROTO_IP
- && cmsg->cmsg_type == IP_TTL) {
- ttlptr = (int *) CMSG_DATA(cmsg);
- received_ttl = *ttlptr;
- break;
- }
+ cmsg != NULL;
+ cmsg = CMSG_NXTHDR(&msgh,cmsg)) {
+ if (cmsg->cmsg_level == IPPROTO_IP
+ && cmsg->cmsg_type == IP_TTL) {
+ ttlptr = (int *) CMSG_DATA(cmsg);
+ received_ttl = *ttlptr;
+ break;
+ }
}
if (cmsg == NULL) {
- /*
- * Error: IP_TTL not enabled or small buffer
- * or I/O error.
- */
+ /*
+ * Error: IP_TTL not enabled or small buffer
+ * or I/O error.
+ */
}
.ta
.fi
.PP
The \fIpasswd\fP structure is defined in \fI<pwd.h>\fP as follows:
.sp
-.RS
+.in +0.5i
.nf
-.ta 8n 16n 32n
struct passwd {
- char *pw_name; /* user name */
- char *pw_passwd; /* user password */
- uid_t pw_uid; /* user ID */
- gid_t pw_gid; /* group ID */
- char *pw_gecos; /* real name */
- char *pw_dir; /* home directory */
- char *pw_shell; /* shell program */
+ char *pw_name; /* user name */
+ char *pw_passwd; /* user password */
+ uid_t pw_uid; /* user ID */
+ gid_t pw_gid; /* group ID */
+ char *pw_gecos; /* real name */
+ char *pw_dir; /* home directory */
+ char *pw_shell; /* shell program */
};
-.ta
.fi
-.RE
+.in -0.5i
.SH "RETURN VALUE"
The \fBfgetpwent\fP() function returns the passwd structure, or NULL if
there are no more entries or an error occurs.
r = frexp(x, &exp);
printf("frexp(%g, &e) = %g: %g * %d^%d = %g\\n",
- x, r, r, FLT_RADIX, exp, x);
+ x, r, r, FLT_RADIX, exp, x);
exit(EXIT_SUCCESS);
} /* main */
.fi
.in +1i
.nf
struct timeb {
- time_t time;
- unsigned short millitm;
- short timezone;
- short dstflag;
+ time_t time;
+ unsigned short millitm;
+ short timezone;
+ short dstflag;
};
.fi
.in -1i
.PP
The \fImntent\fP structure is defined in \fI<mntent.h>\fP as follows:
.sp
-.RS
+.in +0.5i
.nf
-.ne 8
-.ta 8n 16n 32n
struct mntent {
- char *mnt_fsname; /* name of mounted file system */
- char *mnt_dir; /* file system path prefix */
- char *mnt_type; /* mount type (see mntent.h) */
- char *mnt_opts; /* mount options (see mntent.h) */
- int mnt_freq; /* dump frequency in days */
- int mnt_passno; /* pass number on parallel fsck */
+ char *mnt_fsname; /* name of mounted file system */
+ char *mnt_dir; /* file system path prefix */
+ char *mnt_type; /* mount type (see mntent.h) */
+ char *mnt_opts; /* mount options (see mntent.h) */
+ int mnt_freq; /* dump frequency in days */
+ int mnt_passno; /* pass number on parallel fsck */
};
-.ta
.fi
-.RE
+.in -0.5i
Since fields in the mtab and fstab files are separated by whitespace,
octal escapes are used to represent the four characters space (\e040),
.PP
The \fInetent\fP structure is defined in \fI<netdb.h>\fP as follows:
.sp
-.RS
+.in +0.5i
.nf
-.ne 6
-.ta 8n 16n 34n
struct netent {
- char *n_name; /* official network name */
- char **n_aliases; /* alias list */
- int n_addrtype; /* net address type */
- unsigned long int n_net; /* network number */
+ char *n_name; /* official network name */
+ char **n_aliases; /* alias list */
+ int n_addrtype; /* net address type */
+ unsigned long n_net; /* network number */
}
-.ta
.fi
-.RE
+.in -0.5i
.PP
The members of the \fInetent\fP structure are:
.TP
.PP
The \fIprotoent\fP structure is defined in \fI<netdb.h>\fP as follows:
.sp
-.RS
+.in +0.5i
.nf
-.ne 5
-.ta 8n 16n 32n
struct protoent {
- char *p_name; /* official protocol name */
- char **p_aliases; /* alias list */
- int p_proto; /* protocol number */
+ char *p_name; /* official protocol name */
+ char **p_aliases; /* alias list */
+ int p_proto; /* protocol number */
}
-.ta
.fi
-.RE
+.in -0.5i
.PP
The members of the \fIprotoent\fP structure are:
.TP
.sp
.RS
.nf
-.ta 8n 16n 32n
struct passwd {
- char *pw_name; /* user name */
- char *pw_passwd; /* user password */
- uid_t pw_uid; /* user ID */
- gid_t pw_gid; /* group ID */
- char *pw_gecos; /* real name */
- char *pw_dir; /* home directory */
- char *pw_shell; /* shell program */
+ char *pw_name; /* user name */
+ char *pw_passwd; /* user password */
+ uid_t pw_uid; /* user ID */
+ gid_t pw_gid; /* group ID */
+ char *pw_gecos; /* real name */
+ char *pw_dir; /* home directory */
+ char *pw_shell; /* shell program */
};
-.ta
.fi
.RE
.SH "RETURN VALUE"
.sp
.RS
.nf
-.ne 6
-.ta 8n 16n 32n
struct servent {
- char *s_name; /* official service name */
- char **s_aliases; /* alias list */
- int s_port; /* port number */
- char *s_proto; /* protocol to use */
+ char *s_name; /* official service name */
+ char **s_aliases; /* alias list */
+ int s_port; /* port number */
+ char *s_proto; /* protocol to use */
}
-.ta
.fi
.RE
.PP
.PP
The argument \fIitem\fP is of type \fBENTRY\fP, which is a typedef defined in
\fI<search.h>\fP and includes these elements:
+.RS
.sp
.nf
- typedef struct entry {
- char *\fIkey\fP;
- void *\fIdata\fP;
- } ENTRY;
+typedef struct entry {
+ char *\fIkey\fP;
+ void *\fIdata\fP;
+} ENTRY;
+.RE
.fi
.sp
The field \fIkey\fP points to the null-terminated string which is the
The
.I mode
argument specifies the permissions to be placed on the new queue,
- as for
+as for
.BR open (2).
The permissions settings are masked against the process umask.
The
from 1. Thus,
.RS
.nf
- printf("%*d", width, num);
+
+ printf("%*d", width, num);
+
.fi
.RE
and
.RS
.nf
- printf("%2$*1$d", width, num);
+
+ printf("%2$*1$d", width, num);
+
.fi
.RE
are equivalent. The second style allows repeated references to the
Thus,
.RS
.nf
- printf("%'.2f", 1234567.89);
+ printf("%'.2f", 1234567.89);
.fi
.RE
results in `1234567.89' in the POSIX locale, in `1234567,89' in the
To print \*(Pi to five decimal places:
.RS
.nf
+
#include <math.h>
#include <stdio.h>
fprintf(stdout, "pi = %.5f\en", 4 * atan(1.0));
are pointers to strings:
.RS
.nf
+
#include <stdio.h>
fprintf(stdout, "%s, %s %d, %.2d:%.2d\en",
- weekday, month, day, hour, min);
+ weekday, month, day, hour, min);
.fi
.RE
.PP
the arguments in an order specified by the format:
.RS
.nf
+
#include <stdio.h>
fprintf(stdout, format,
- weekday, month, day, hour, min);
+ weekday, month, day, hour, min);
+
.fi
.RE
where
(code correct for both glibc 2.0 and glibc 2.1):
.RS
.nf
+
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
char *
-make_message(const char *fmt, ...) {
- /* Guess we need no more than 100 bytes. */
- int n, size = 100;
- char *p, *np;
- va_list ap;
+make_message(const char *fmt, ...)
+{
+ /* Guess we need no more than 100 bytes. */
+ int n, size = 100;
+ char *p, *np;
+ va_list ap;
- if ((p = malloc(size)) == NULL)
- return NULL;
+ if ((p = malloc(size)) == NULL)
+ return NULL;
- while (1) {
- /* Try to print in the allocated space. */
- va_start(ap, fmt);
- n = vsnprintf(p, size, fmt, ap);
- va_end(ap);
- /* If that worked, return the string. */
- if (n > \-1 && n < size)
- return p;
- /* Else try again with more space. */
- if (n > \-1) /* glibc 2.1 */
- size = n+1; /* precisely what is needed */
- else /* glibc 2.0 */
- size *= 2; /* twice the old size */
- if ((np = realloc (p, size)) == NULL) {
- free(p);
- return NULL;
- } else {
- p = np;
- }
- }
+ while (1) {
+ /* Try to print in the allocated space. */
+ va_start(ap, fmt);
+ n = vsnprintf(p, size, fmt, ap);
+ va_end(ap);
+ /* If that worked, return the string. */
+ if (n > \-1 && n < size)
+ return p;
+ /* Else try again with more space. */
+ if (n > \-1) /* glibc 2.1 */
+ size = n+1; /* precisely what is needed */
+ else /* glibc 2.0 */
+ size *= 2; /* twice the old size */
+ if ((np = realloc (p, size)) == NULL) {
+ free(p);
+ return NULL;
+ } else {
+ p = np;
+ }
+ }
}
.fi
.RE
perror("sockatmark");
break;
}
-
+
if (atmark)
break;
nothing against an assignment
.RS
.nf
- va_list aq = ap;
+ va_list aq = ap;
.fi
.RE
Unfortunately, there are also systems that make it an
array of pointers (of length 1), and there one needs
.RS
.nf
- va_list aq;
- *aq = *ap;
+ va_list aq;
+ *aq = *ap;
.fi
.RE
Finally, on systems where parameters are passed in registers,
so that the above assignment can be replaced by
.RS
.nf
- va_list aq;
- va_copy(aq, ap);
- ...
- va_end(aq);
+ va_list aq;
+ va_copy(aq, ap);
+ ...
+ va_end(aq);
.fi
.RE
Each invocation of
#include <stdio.h>
#include <stdarg.h>
-void foo(char *fmt, ...) {
- va_list ap;
- int d;
- char c, *s;
+void
+foo(char *fmt, ...)
+{
+ va_list ap;
+ int d;
+ char c, *s;
- va_start(ap, fmt);
- while (*fmt)
- switch(*fmt++) {
- case 's': /* string */
- s = va_arg(ap, char *);
- printf("string %s\en", s);
- break;
- case 'd': /* int */
- d = va_arg(ap, int);
- printf("int %d\en", d);
- break;
- case 'c': /* char */
- /* need a cast here since va_arg only
- takes fully promoted types */
- c = (char) va_arg(ap, int);
- printf("char %c\en", c);
- break;
- }
- va_end(ap);
+ va_start(ap, fmt);
+ while (*fmt)
+ switch(*fmt++) {
+ case 's': /* string */
+ s = va_arg(ap, char *);
+ printf("string %s\en", s);
+ break;
+ case 'd': /* int */
+ d = va_arg(ap, int);
+ printf("int %d\en", d);
+ break;
+ case 'c': /* char */
+ /* need a cast here since va_arg only
+ takes fully promoted types */
+ c = (char) va_arg(ap, int);
+ printf("char %c\en", c);
+ break;
+ }
+ va_end(ap);
}
.fi
.RE
.nf
#include <varargs.h>
-void foo(va_alist) va_dcl {
- va_list ap;
+void
+foo(va_alist)
+ va_dcl
+{
+ va_list ap;
- va_start(ap);
- while(...) {
- ...
- x = va_arg(ap, type);
- ...
- }
- va_end(ap);
+ va_start(ap);
+ while(...) {
+ ...
+ x = va_arg(ap, type);
+ ...
+ }
+ va_end(ap);
}
.fi
.RE
date and time representation. One meets all kinds of strange obfuscations
to circumvent this gcc problem. A relatively clean one is to add an
intermediate function
-.RS
-size_t my_strftime(char *s, size_t max, const char *fmt,
-const struct tm *tm) {
-.br
- return strftime(s, max, fmt, tm);
-.br
+.in +0.5i
+.nf
+
+size_t
+my_strftime(char *s, size_t max, const char *fmt,
+ const struct tm *tm)
+{
+ return strftime(s, max, fmt, tm);
}
-.RE
+.fi
+.in -0.5i
.SH EXAMPLE
The program below can be used to experiment with
.BR strftime ().
Setting the speed to \fBB0\fP instructs the modem to "hang up".
The actual bit rate corresponding to \fBB38400\fP may be altered with
-\fBsetserial\fP(8).
+\fBsetserial\fP(8).
.LP
The input and output baud rates are stored in the \fItermios\fP
structure.
the normal root device to
.IR /dev/hdb1 :
.nf
- echo 0x365 >/proc/sys/kernel/real-root-dev
+
+ echo 0x365 >/proc/sys/kernel/real-root-dev
+
.fi
For a NFS example, the following shell command lines would change the
normal root device to the NFS directory
on a local networked NFS server with IP number 193.8.232.7 for a system with
IP number 193.8.232.7 and named 'idefix':
.nf
- echo /var/nfsroot >/proc/sys/kernel/nfs-root-name
- echo 193.8.232.2:193.8.232.7::255.255.255.0:idefix \\
- >/proc/sys/kernel/nfs-root-addrs
- echo 255 >/proc/sys/kernel/real-root-dev
+
+ echo /var/nfsroot >/proc/sys/kernel/nfs-root-name
+ echo 193.8.232.2:193.8.232.7::255.255.255.0:idefix \\
+ >/proc/sys/kernel/nfs-root-addrs
+ echo 255 >/proc/sys/kernel/real-root-dev
.fi
.BR Note :
can be created with the following commands:
.nf
- mknod \-m 644 /dev/random c 1 8
- mknod \-m 644 /dev/urandom c 1 9
- chown root:root /dev/random /dev/urandom
+ mknod \-m 644 /dev/random c 1 8
+ mknod \-m 644 /dev/urandom c 1 9
+ chown root:root /dev/random /dev/urandom
.fi
When a Linux system starts up without much operator interaction,
which is run during the Linux system start-up sequence:
.nf
- echo "Initializing random number generator..."
- random_seed=/var/run/random-seed
- # Carry a random seed from start-up to start-up
- # Load and then save the whole entropy pool
- if [ \-f $random_seed ]; then
- cat $random_seed >/dev/urandom
- else
- touch $random_seed
- fi
- chmod 600 $random_seed
- poolfile=/proc/sys/kernel/random/poolsize
- [ \-r $poolfile ] && bytes=`cat $poolfile` || bytes=512
- dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
+ echo "Initializing random number generator..."
+ random_seed=/var/run/random-seed
+ # Carry a random seed from start-up to start-up
+ # Load and then save the whole entropy pool
+ if [ \-f $random_seed ]; then
+ cat $random_seed >/dev/urandom
+ else
+ touch $random_seed
+ fi
+ chmod 600 $random_seed
+ poolfile=/proc/sys/kernel/random/poolsize
+ [ \-r $poolfile ] && bytes=`cat $poolfile` || bytes=512
+ dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
.fi
Also, add the following lines in an appropriate script which is
run during the Linux system shutdown:
.nf
- # Carry a random seed from shut-down to start-up
- # Save the whole entropy pool
- echo "Saving random seed..."
- random_seed=/var/run/random-seed
- touch $random_seed
- chmod 600 $random_seed
- poolfile=/proc/sys/kernel/random/poolsize
- [ \-r $poolfile ] && bytes=`cat $poolfile` || bytes=512
- dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
+ # Carry a random seed from shut-down to start-up
+ # Save the whole entropy pool
+ echo "Saving random seed..."
+ random_seed=/var/run/random-seed
+ touch $random_seed
+ chmod 600 $random_seed
+ poolfile=/proc/sys/kernel/random/poolsize
+ [ \-r $poolfile ] && bytes=`cat $poolfile` || bytes=512
+ dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
.fi
.SH "PROC INTERFACE"
The files in the directory
advantage.
.SH EXAMPLE
.nf
- 127.0.0.1 localhost
- 192.168.1.10 foo.mydomain.org foo
- 192.168.1.13 bar.mydomain.org bar
- 146.82.138.7 master.debian.org master
- 209.237.226.90 www.opensource.org
+127.0.0.1 localhost
+192.168.1.10 foo.mydomain.org foo
+192.168.1.13 bar.mydomain.org bar
+146.82.138.7 master.debian.org master
+209.237.226.90 www.opensource.org
.fi
.SH "NOTE"
Modifications to this file normally take effect immediately,
.in +.5i
.sp
.nf
-.ta .5i +\w'unsigned int\0\0'u
struct ttinfo {
- long tt_gmtoff;
- int tt_isdst;
- unsigned int tt_abbrind;
+ long tt_gmtoff;
+ int tt_isdst;
+ unsigned int tt_abbrind;
};
.in -.5i
.fi
as their parameter.
.nf
-.ta 4 20 33
struct arpreq {
- struct sockaddr arp_pa; /* protocol address */
- struct sockaddr arp_ha; /* hardware address */
- int arp_flags; /* flags */
- struct sockaddr arp_netmask; /* netmask of protocol address */
- char arp_dev[16];
+ struct sockaddr arp_pa; /* protocol address */
+ struct sockaddr arp_ha; /* hardware address */
+ int arp_flags; /* flags */
+ struct sockaddr arp_netmask; /* netmask of protocol address */
+ char arp_dev[16];
};
.fi
.sp
.nf
/* check that exp(i * pi) == \-1 */
-#include <math.h> /* for atan */
+#include <math.h> /* for atan */
#include <complex.h>
int
.PP
.RS
.nf
-.ta 4n 20n 32n
struct at_addr {
- u_short s_net;
- u_char s_node;
+ u_short s_net;
+ u_char s_node;
};
struct sockaddr_atalk {
- sa_family_t sat_family; /* address family */
- u_char sat_port; /* port */
- struct at_addr sat_addr; /* net/node */
+ sa_family_t sat_family; /* address family */
+ u_char sat_port; /* port */
+ struct at_addr sat_addr; /* net/node */
};
.ta
.fi
an empty list, as in
.br
.nf
- xv \-wait 0 *.gif *.jpg
+ xv \-wait 0 *.gif *.jpg
.fi
where perhaps no *.gif files are present (and this is not
an error).
(Similar problems occur elsewhere. E.g., where old scripts have
.br
.nf
- rm `find . \-name "*~"`
+ rm `find . \-name "*~"`
.fi
new scripts require
.br
.nf
- rm \-f nosuchfile `find . \-name "*~"`
+ rm \-f nosuchfile `find . \-name "*~"`
.fi
to avoid error messages from
.I rm
.PP
.RS
.nf
-.ta 4n 18n 32n
struct sockaddr_x25 {
- sa_family_t sx25_family; /* must be AF_X25 */
- x25_address sx25_addr; /* X.121 Address */
+ sa_family_t sx25_family; /* must be AF_X25 */
+ x25_address sx25_addr; /* X.121 Address */
};
-.ta
.fi
.RE
.PP