diff options
author | Ulrich Drepper <drepper@redhat.com> | 1998-08-08 20:02:34 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1998-08-08 20:02:34 +0000 |
commit | 7ce241a03e2c0b49482d9d05c8ddb765e89a01d9 (patch) | |
tree | e8278ec57d7c434f389dc57afe24f66f93c06ced /manual | |
parent | 9fbffc467639130663cc1959a59eb980b9207210 (diff) | |
download | glibc-7ce241a03e2c0b49482d9d05c8ddb765e89a01d9.tar.gz glibc-7ce241a03e2c0b49482d9d05c8ddb765e89a01d9.tar.xz glibc-7ce241a03e2c0b49482d9d05c8ddb765e89a01d9.zip |
Update.
1998-07-31 17:59 Ulrich Drepper <drepper@cygnus.com> * sysdeps/generic/bits/byteswap.h: Fix problems with side effects. * manual/filesys.texi: Document truncate and ftruncate. Patch by Michael Deutschmann <michael@talamasca.wkpowerlink.com>. * shadow/putspent.c: Lock stream while generating the output. * sunrpc/clnt_unix.c: Use ucred instead of cmsgcred again. (__msgwrite): Rewrite accordingly. * sunrpc/svc_unix.c: Likewise. * sysdeps/unix/sysv/linux/Dist: Remove __recvmsg.S and __sendmsg.S. * sysdeps/unix/sysv/linux/Makefile [$(subdir)==socket] (sysdep_routines): Remove __sendmsg and __recvmsg. * sysdeps/unix/sysv/linux/__recvmsg.S: Removed. * sysdeps/unix/sysv/linux/__sendmsg.S: Removed. * sysdeps/unix/sysv/linux/recvmsg.c: Removed. * sysdeps/unix/sysv/linux/sendmsg.c: Removed. * sysdeps/unix/sysv/linux/recvmsg.S: New file. * sysdeps/unix/sysv/linux/sendmsg.S: New file. * sysdeps/unix/sysv/linux/bits/socket.h: Define SCM_CREDENTIALS and struct ucred. Remove struct cmsgcred. Patches by Thorsten Kukuk. 1998-08-03 Andreas Jaeger <aj@arthur.rhein-neckar.de> * inet/rcmd.c (__ivaliduser): Allow '#' as comment character. 1998-08-08 14:42 Ulrich Drepper <drepper@cygnus.com> * argp/argp-help.c: Prepare to be used outside glibc without gcc by adding usual alloca cruft. Reported by Eleftherios Gkioulekas <lf@amath.washington.edu>. 1998-04-05 Jim Meyering <meyering@ascend.com> * lib/regex.c (WIDE_CHAR_SUPPORT): Define. This now depends on HAVE_BTOWC so systems that lack btowc (like solaris-2.5.1) don't lose. 1998-08-07 Mark Kettenis <kettenis@phys.uva.nl> * sysdeps/generic/bits/sigaction.h: Remove definition of SA_DISABLE. * sysdeps/generic/bits/sigstack.h: Define SS_DISABLE, SS_ONSTACK, MINSIGSTKZ and SIGSTKSZ. Definitions match BSD. * hurd/sigunwind.c (_hurdsig_longjmp_from_handler): Use SS_ONSTACK instead of SA_ONSTACK. * sysdeps/mach/hurd/sigaltstack.c (__sigaltstack): Renamed from sigaltstack, and created a weak alias. Use SS_DISABLE and SS_ONSTACK instead of SA_DISABLE and SA_ONSTACK. * sysdeps/mach/hurd/sigstack.c (sigstack): Use SS_ONSTACK instead of SA_ONSTACK. Call __sigaltstack instead of sigaltstack. * sysdeps/mach/hurd/i386/sigreturn.c (__sigreturn): Use SS_ONSTACK instead of SA_ONSTACK. * sysdeps/mach/hurd/alpha/sigreturn.c (__sigreturn): Likewise. * sysdeps/mach/hurd/mips/sigreturn.c (__sigreturn): Likewise. * sysdeps/mach/hurd/i386/trampoline.c (_hurd_setup_sighandler): Use SS_DISABLE instead of SA_DISABLE. Use SS_ONSTACK instead of SA_ONSTACK where appropriate. * sysdeps/mach/hurd/alpha/trampoline.c (_hurd_setup_sighandler): Likewise. * sysdeps/mach/hurd/hppa/trampoline.c (_hurd_setup_sighandler): Likewise. * sysdeps/mach/hurd/mips/trampoline.c (_hurd_setup_sighandler): Likewise. * manual/signal.texi (Signal Stack): Talk about SS_DISABLE and SS_ONSTACK instead of SA_DISABLE and SA_ONSTACK in discussion of the `ss_flags' member of `struct sigaltstack'. 1998-08-05 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * libio/Makefile (routines) [$(versioning)=yes]: Add oldtmpfile. (shared-only-routines): Likewise. * libio/oldtmpfile.c: New file * stdio-common/tmpfile.c: Use __fdopen and __close. [USE_IN_LIBIO]: Use _IO_fdopen instead of _IO_new_fdopen. Put tmpfile on symbol version GLIBC_2.1. * stdio-common/tmpfile64.c: Use __fdopen and __close. [USE_IN_LIBIO]: Use _IO_fdopen instead of _IO_new_fdopen. * stdio-common/Version [GLIBC_2.1]: Add tmpfile. * stdio-common/tempnam.c: Use __strdup instead of strdup. * sysdeps/posix/fdopen.c: Define __fdopen and make fdopen weak alias. * sysdeps/generic/fdopen.c: Likewise. * sysdeps/mach/hurd/fdopen.c: Likewise. * stdio/stdio.h: Declare __fdopen. * sunrpc/openchild.c: Use __fdopen instead of fdopen. [USE_IN_LIBIO]: Map __fdopen to _IO_fdopen. * sysdeps/posix/tempname.c (__gen_tempname): Don't bother checking __stub_open64, it is never defined. 1998-08-05 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * libio/iofopen64.c: Fix typo. Avoid unnessary casts. * libio/iopopen.c: Unlink file before freeing it if command creation failed. Avoid unnessary casts. * libio/iofdopen.c: Avoid unnecessary cast. * pwd/fgetpwent_r.c [USE_IN_LIBIO]: Map funlockfile to _IO_funlockfile. * pwd/fgetspent_r.c [USE_IN_LIBIO]: Likewise. 1998-08-06 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * grp/grp.h, pwd/pwd.h: Don't declare __grpopen, __grpread, __grpalloc, __grpscan and the corresponding pwd functions, they were removed long ago. 1998-08-06 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * math/libm-test.c (csqrt_test): Adjust epsilons. (casinh_test): Likewise. 1998-08-06 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * posix/globtest.sh: Fix typo. Remove second test output file. 1998-08-07 Cristian Gafton <gafton@redhat.com> * pwd/putpwent.c (putpwent): Avoid writting (none) in the passwd file. * shadow/putspent.c (putspent): Likewise. * grp/putgrent.c: New file. * grp/Makefile (routines): Add putgrent. * grp/Versions [GLIBC_2.1]: Add putgrent. * grp/grp.h: Add putgrent prototype. 1998-08-04 19:33 Ulrich Drepper <drepper@cygnus.com> * elf/elf.h: More ELF definitions.
Diffstat (limited to 'manual')
-rw-r--r-- | manual/filesys.texi | 143 | ||||
-rw-r--r-- | manual/signal.texi | 4 |
2 files changed, 145 insertions, 2 deletions
diff --git a/manual/filesys.texi b/manual/filesys.texi index 5d6df0a1ac..302010f78f 100644 --- a/manual/filesys.texi +++ b/manual/filesys.texi @@ -1308,6 +1308,7 @@ modify these attributes of files. * Testing File Access:: How to find out if your process can access a file. * File Times:: About the time attributes of a file. +* File Size:: Manually changing the size of a file. @end menu @node Attribute Meanings @@ -2502,6 +2503,148 @@ The return values and error conditions are the same as for the @code{utime} function. @end deftypefun +@node File Size +@subsection File Size + +Normally file sizes are maintained automatically. A file begins with a +size of @math{0} and is automatically extended when data is written +past its end. It is also possible to empty a file completely in an +@code{open} or @code{fopen} call. + +However, sometimes it is neccessary to @emph{reduce} the size of a file. +This can be done with the @code{truncate} and @code{ftruncate} functions. +They were introduced in BSD Unix. @code{ftruncate} was later added to +POSIX.1. + +Some systems allow you to extend a file (creating holes) with these +functions. This is useful when using memory-mapped I/O +(@pxref{Memory-mapped I/O}), where files are not automatically extended. +However it is not portable but must be implemented if @code{mmap} allows +mapping of files (i.e., @code{_POSIX_MAPPED_FILES} is defined). + +Using these functions on anything other than a regular file gives +@emph{undefined} results. On many systems, such a call will appear to +succeed, without actually accomplishing anything. + +@deftypefun int truncate (const char *@var{filename}, off_t @var{length}) + +The @code{truncate} function changes the size of @var{filename} to +@var{length}. If @var{length} is shorter than the previous length, data at +the end will be lost. + +If @var{length} is longer, holes will be added to the end. However, some +systems do not support this feature and will leave the file unchanged. + +The return value is @math{0} for success, or @math{-1} for an error. In +addition to the usual file name errors, the following errors may occur: + +@table @code + +@item EACCES +The file is a directory or not writable. + +@item EINVAL +@var{length} is negative. + +@item EFBIG +The operation would extend the file beyond the limits of the operating system. + +@item EIO +A hardware I/O error occured. + +@item EPERM +The file is "append-only" or "immutable". + +@item EINTR +The operation was interrupted by a signal. + +@end table + +@end deftypefun + +@deftypefun int ftruncate (int @var{fd}, off_t @var{length}) + +This is like @code{truncate}, but it works on a file descriptor @var{fd}. + +@code{ftruncate} is especially useful in combination with @code{mmap}. +Since the mapped region must have a fixed size one cannot enlarge the +file by writing something beyond the last mapped page. Instead one has +to enlarge the file itself and then remap the file with the new size. +The example below shows how this works. + +The return value is @math{0} for success, or @math{-1} for an error. The +following errors may occur: + +@table @code + +@item EBADF +@var{fd} does not correspond to an open file. + +@item EACCES +@var{fd} is a directory or not open for write. + +@item EINVAL +@var{length} is negative. + +@item EFBIG +The operation would extend the file beyond the limits of the operating system. +@c or the open() call -- with the not-yet-discussed feature of opening +@c files with extra-large offsets. + +@item EIO +A hardware I/O error occured. + +@item EPERM +The file is "append-only" or "immutable". + +@item EINTR +The operation was interrupted by a signal. + +@c ENOENT is also possible on Linux --- however it only occurs if the file +@c descriptor has a `file' structure but no `inode' structure. I'm not +@c sure how such an fd could be created. Perhaps it's a bug. + +@end table + +@end deftypefun + +As announced here is a little example how to use @code{ftruncate} in +combination with @code{mmap}: + +@smallexample +int fd; +void *start; +size_t len; + +int +add (off_t at, void *block, size_t size) +@{ + if (at + size > len) + @{ + /* Resize the file and remap. */ + size_t ps = sysconf (_SC_PAGESIZE); + size_t ns = (at + size + ps - 1) & ~(ps - 1); + void *np; + if (ftruncate (fd, ns) < 0) + return -1; + np = mmap (NULL, ns, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); + if (np == MAP_FAILED) + return -1; + start = np; + len = ns; + @} + memcpy ((char *) start + at, block, size); + return 0; +@} +@end smallexample + +The function @code{add} allows to add at arbitrary positions in the file +given blocks of memory. If the current size of the file is too small it +is extended. Please note the it is extended in multiples of a pagesize. +This is a requirement of @code{mmap}. The program has to track the real +size and once the program finished to work a final @code{ftruncate} call +should set the real size of the file. + @node Making Special Files @section Making Special Files @cindex creating special files diff --git a/manual/signal.texi b/manual/signal.texi index b3f67b6685..2961c4f6ad 100644 --- a/manual/signal.texi +++ b/manual/signal.texi @@ -3123,10 +3123,10 @@ stack and increase @code{ss_size} accordingly. This field contains the bitwise @sc{or} of these flags: @vtable @code -@item SA_DISABLE +@item SS_DISABLE This tells the system that it should not use the signal stack. -@item SA_ONSTACK +@item SS_ONSTACK This is set by the system, and indicates that the signal stack is currently in use. If this bit is not set, then signals will be delivered on the normal user stack. |