diff options
author | cvs2svn <> | 2013-06-07 12:43:02 +0400 |
---|---|---|
committer | cvs2svn <> | 2013-06-07 12:43:02 +0400 |
commit | dbd7b8d510db6798797e84163d4c38fb57fad890 (patch) | |
tree | c077d5668f02a2682059188b876735baa29bbcb9 /winsup/doc/pathnames.xml | |
parent | c82eac05c783fa1cb82eac9216dab1ed8aa482ae (diff) |
This commit was manufactured by cvs2svn to create tag 'cygwin-cygwin-1_7_20-release
1_7_20-release'.
Sprout from cygwin-64bit-premerge-branch 2013-04-22 17:11:23 UTC cvs2svn 'This commit was manufactured by cvs2svn to create branch 'cygwin-64bit-'
Cherrypick from master 2013-06-07 08:43:01 UTC Corinna Vinschen <corinna@vinschen.de> ' * posix.sgml (std-notes): Fix typo.':
COPYING.NEWLIB
ChangeLog
config.guess
config.sub
config/ChangeLog
config/bootstrap-asan.mk
config/dfp.m4
config/picflag.m4
include/ChangeLog
include/elf/ChangeLog
include/elf/aarch64.h
include/elf/common.h
include/elf/mips.h
include/elf/msp430.h
include/opcode/ChangeLog
include/opcode/avr.h
include/opcode/mips.h
include/opcode/msp430.h
newlib/ChangeLog
newlib/MAINTAINERS
newlib/configure
newlib/configure.host
newlib/configure.in
newlib/libc/configure
newlib/libc/configure.in
newlib/libc/ctype/ctype_.c
newlib/libc/ctype/isalnum.c
newlib/libc/ctype/isalpha.c
newlib/libc/ctype/isblank.c
newlib/libc/ctype/iscntrl.c
newlib/libc/ctype/isdigit.c
newlib/libc/ctype/islower.c
newlib/libc/ctype/isprint.c
newlib/libc/ctype/ispunct.c
newlib/libc/ctype/isxdigit.c
newlib/libc/include/machine/ieeefp.h
newlib/libc/include/machine/setjmp.h
newlib/libc/include/reent.h
newlib/libc/include/sys/cdefs.h
newlib/libc/include/sys/config.h
newlib/libc/include/sys/features.h
newlib/libc/include/sys/reent.h
newlib/libc/include/sys/stat.h
newlib/libc/libc.texinfo
newlib/libc/machine/arm/Makefile.am
newlib/libc/machine/arm/Makefile.in
newlib/libc/machine/arm/memcpy-armv7a.S
newlib/libc/machine/arm/memcpy-armv7m.S
newlib/libc/machine/arm/memcpy-stub.c
newlib/libc/machine/arm/memcpy.S
newlib/libc/machine/arm/strcmp.S
newlib/libc/machine/configure
newlib/libc/machine/configure.in
newlib/libc/machine/powerpc/Makefile.am
newlib/libc/machine/powerpc/Makefile.in
newlib/libc/reent/reent.c
newlib/libc/stdio/fgetc.c
newlib/libc/stdio/fgetwc.c
newlib/libc/stdio/fgetws.c
newlib/libc/stdio/findfp.c
newlib/libc/stdio/fputc.c
newlib/libc/stdio/fputwc.c
newlib/libc/stdio/fputws.c
newlib/libc/stdio/getc.c
newlib/libc/stdio/getchar.c
newlib/libc/stdio/local.h
newlib/libc/stdio/putc.c
newlib/libc/stdio/putchar.c
newlib/libc/stdio/scanf.c
newlib/libc/stdio/setvbuf.c
newlib/libc/stdio/ungetwc.c
newlib/libc/stdio/vfscanf.c
newlib/libc/stdio/vfwscanf.c
newlib/libc/stdio/viprintf.c
newlib/libc/stdio/viscanf.c
newlib/libc/stdio/vprintf.c
newlib/libc/stdio/vscanf.c
newlib/libc/stdio/vwprintf.c
newlib/libc/stdio/vwscanf.c
newlib/libc/stdio/wscanf.c
newlib/libc/stdlib/Makefile.am
newlib/libc/stdlib/Makefile.in
newlib/libc/stdlib/__atexit.c
newlib/libc/stdlib/__call_atexit.c
newlib/libc/stdlib/ecvtbuf.c
newlib/libc/stdlib/mblen.c
newlib/libc/stdlib/mbrlen.c
newlib/libc/stdlib/mbrtowc.c
newlib/libc/stdlib/mbtowc.c
newlib/libc/stdlib/nano-mallocr.c
newlib/libc/stdlib/rand.c
newlib/libc/stdlib/strtod.c
newlib/libc/stdlib/wcrtomb.c
newlib/libc/stdlib/wctob.c
newlib/libc/stdlib/wctomb.c
newlib/libc/string/strtok.c
newlib/libc/time/asctime.c
newlib/libc/time/gmtime.c
newlib/libc/time/lcltime.c
newlib/libm/libm.texinfo
winsup/cygserver/ChangeLog
winsup/cygserver/ChangeLog.64bit
winsup/cygserver/Makefile.in
winsup/cygserver/bsd_helper.cc
winsup/cygserver/bsd_helper.h
winsup/cygserver/bsd_log.cc
winsup/cygserver/bsd_log.h
winsup/cygserver/bsd_mutex.cc
winsup/cygserver/client.cc
winsup/cygserver/cygserver.cc
winsup/cygserver/msg.cc
winsup/cygserver/process.h
winsup/cygserver/sem.cc
winsup/cygserver/shm.cc
winsup/cygserver/sysv_shm.cc
winsup/cygserver/threaded_queue.h
winsup/cygwin/ChangeLog
winsup/cygwin/ChangeLog.64bit
winsup/cygwin/Makefile.in
winsup/cygwin/aclocal.m4
winsup/cygwin/advapi32.cc
winsup/cygwin/autoload.cc
winsup/cygwin/automode.c
winsup/cygwin/binmode.c
winsup/cygwin/child_info.h
winsup/cygwin/common.din
winsup/cygwin/configure
winsup/cygwin/configure.ac
winsup/cygwin/cpuid.h
winsup/cygwin/cygerrno.h
winsup/cygwin/cygheap.cc
winsup/cygwin/cygheap.h
winsup/cygwin/cygmagic
winsup/cygwin/cygmalloc.h
winsup/cygwin/cygserver.h
winsup/cygwin/cygserver_ipc.h
winsup/cygwin/cygthread.cc
winsup/cygwin/cygtls.cc
winsup/cygwin/cygtls.h
winsup/cygwin/cygwin.sc.in
winsup/cygwin/dcrt0.cc
winsup/cygwin/debug.h
winsup/cygwin/devices.cc
winsup/cygwin/devices.h
winsup/cygwin/devices.in
winsup/cygwin/dir.cc
winsup/cygwin/dlfcn.cc
winsup/cygwin/dll_init.cc
winsup/cygwin/dll_init.h
winsup/cygwin/dtable.cc
winsup/cygwin/environ.cc
winsup/cygwin/environ.h
winsup/cygwin/errno.cc
winsup/cygwin/exception.h
winsup/cygwin/exceptions.cc
winsup/cygwin/external.cc
winsup/cygwin/fcntl.cc
winsup/cygwin/fenv.cc
winsup/cygwin/fhandler.cc
winsup/cygwin/fhandler.h
winsup/cygwin/fhandler_clipboard.cc
winsup/cygwin/fhandler_console.cc
winsup/cygwin/fhandler_dev.cc
winsup/cygwin/fhandler_disk_file.cc
winsup/cygwin/fhandler_dsp.cc
winsup/cygwin/fhandler_fifo.cc
winsup/cygwin/fhandler_floppy.cc
winsup/cygwin/fhandler_mailslot.cc
winsup/cygwin/fhandler_mem.cc
winsup/cygwin/fhandler_netdrive.cc
winsup/cygwin/fhandler_proc.cc
winsup/cygwin/fhandler_process.cc
winsup/cygwin/fhandler_procnet.cc
winsup/cygwin/fhandler_procsys.cc
winsup/cygwin/fhandler_procsysvipc.cc
winsup/cygwin/fhandler_random.cc
winsup/cygwin/fhandler_raw.cc
winsup/cygwin/fhandler_registry.cc
winsup/cygwin/fhandler_serial.cc
winsup/cygwin/fhandler_socket.cc
winsup/cygwin/fhandler_tape.cc
winsup/cygwin/fhandler_termios.cc
winsup/cygwin/fhandler_tty.cc
winsup/cygwin/fhandler_virtual.cc
winsup/cygwin/fhandler_virtual.h
winsup/cygwin/fhandler_windows.cc
winsup/cygwin/fhandler_zero.cc
winsup/cygwin/flock.cc
winsup/cygwin/fork.cc
winsup/cygwin/gendef
winsup/cygwin/gentls_offsets
winsup/cygwin/glob.cc
winsup/cygwin/globals.cc
winsup/cygwin/grp.cc
winsup/cygwin/heap.cc
winsup/cygwin/hookapi.cc
winsup/cygwin/i686.din
winsup/cygwin/include/a.out.h
winsup/cygwin/include/asm/byteorder.h
winsup/cygwin/include/bits/wordsize.h
winsup/cygwin/include/cygwin/acl.h
winsup/cygwin/include/cygwin/config.h
winsup/cygwin/include/cygwin/cygwin_dll.h
winsup/cygwin/include/cygwin/grp.h
winsup/cygwin/include/cygwin/if.h
winsup/cygwin/include/cygwin/ipc.h
winsup/cygwin/include/cygwin/msg.h
winsup/cygwin/include/cygwin/sem.h
winsup/cygwin/include/cygwin/shm.h
winsup/cygwin/include/cygwin/signal.h
winsup/cygwin/include/cygwin/socket.h
winsup/cygwin/include/cygwin/stat.h
winsup/cygwin/include/cygwin/stdlib.h
winsup/cygwin/include/cygwin/sysproto.h
winsup/cygwin/include/cygwin/time.h
winsup/cygwin/include/cygwin/types.h
winsup/cygwin/include/cygwin/version.h
winsup/cygwin/include/fcntl.h
winsup/cygwin/include/fts.h
winsup/cygwin/include/ftw.h
winsup/cygwin/include/glob.h
winsup/cygwin/include/inttypes.h
winsup/cygwin/include/io.h
winsup/cygwin/include/limits.h
winsup/cygwin/include/mntent.h
winsup/cygwin/include/stdint.h
winsup/cygwin/include/sys/cygwin.h
winsup/cygwin/include/sys/dirent.h
winsup/cygwin/include/sys/resource.h
winsup/cygwin/include/sys/socket.h
winsup/cygwin/include/sys/strace.h
winsup/cygwin/init.cc
winsup/cygwin/ioctl.cc
winsup/cygwin/ipc.cc
winsup/cygwin/kernel32.cc
winsup/cygwin/lc_msg.h
winsup/cygwin/lib/_cygwin_crt0_common.cc
winsup/cygwin/lib/crt0.h
winsup/cygwin/lib/cygwin_attach_dll.c
winsup/cygwin/lib/premain0.c
winsup/cygwin/lib/premain1.c
winsup/cygwin/lib/premain2.c
winsup/cygwin/lib/premain3.c
winsup/cygwin/libc/arc4random.cc
winsup/cygwin/libc/base64.c
winsup/cygwin/libc/bsdlib.cc
winsup/cygwin/libc/fts.c
winsup/cygwin/libc/ftw.c
winsup/cygwin/libc/inet_network.c
winsup/cygwin/libc/minires-os-if.c
winsup/cygwin/libc/minires.c
winsup/cygwin/libc/nftw.c
winsup/cygwin/libc/rcmd.cc
winsup/cygwin/libc/rexec.cc
winsup/cygwin/libstdcxx_wrapper.cc
winsup/cygwin/localtime.cc
winsup/cygwin/malloc_wrapper.cc
winsup/cygwin/miscfuncs.cc
winsup/cygwin/mkimport
winsup/cygwin/mktemp.cc
winsup/cygwin/mmap.cc
winsup/cygwin/mount.cc
winsup/cygwin/mount.h
winsup/cygwin/msg.cc
winsup/cygwin/mtinfo.h
winsup/cygwin/net.cc
winsup/cygwin/netdb.cc
winsup/cygwin/nfs.h
winsup/cygwin/nlsfuncs.cc
winsup/cygwin/ntdll.h
winsup/cygwin/ntea.cc
winsup/cygwin/passwd.cc
winsup/cygwin/path.cc
winsup/cygwin/path.h
winsup/cygwin/perprocess.h
winsup/cygwin/pinfo.cc
winsup/cygwin/pinfo.h
winsup/cygwin/pipe.cc
winsup/cygwin/poll.cc
winsup/cygwin/posix.sgml
winsup/cygwin/posix_ipc.cc
winsup/cygwin/profil.c
winsup/cygwin/profil.h
winsup/cygwin/pseudo-reloc.cc
winsup/cygwin/pwdgrp.h
winsup/cygwin/regex/engine.c
winsup/cygwin/regex/regcomp.c
winsup/cygwin/registry.cc
winsup/cygwin/regparm.h
winsup/cygwin/release/1.7.19
winsup/cygwin/release/1.7.20
winsup/cygwin/resource.cc
winsup/cygwin/sched.cc
winsup/cygwin/sec_acl.cc
winsup/cygwin/sec_auth.cc
winsup/cygwin/sec_helper.cc
winsup/cygwin/security.cc
winsup/cygwin/security.h
winsup/cygwin/select.cc
winsup/cygwin/select.h
winsup/cygwin/sem.cc
winsup/cygwin/shared.cc
winsup/cygwin/shared_info.h
winsup/cygwin/shm.cc
winsup/cygwin/signal.cc
winsup/cygwin/sigproc.cc
winsup/cygwin/sigproc.h
winsup/cygwin/smallprint.cc
winsup/cygwin/spawn.cc
winsup/cygwin/speclib
winsup/cygwin/spinlock.h
winsup/cygwin/strace.cc
winsup/cygwin/strfuncs.cc
winsup/cygwin/strsig.cc
winsup/cygwin/sync.cc
winsup/cygwin/sync.h
winsup/cygwin/syscalls.cc
winsup/cygwin/sysconf.cc
winsup/cygwin/syslog.cc
winsup/cygwin/termios.cc
winsup/cygwin/textmode.c
winsup/cygwin/textreadmode.c
winsup/cygwin/thread.cc
winsup/cygwin/thread.h
winsup/cygwin/timer.cc
winsup/cygwin/times.cc
winsup/cygwin/tlsoffsets.h
winsup/cygwin/tlsoffsets64.h
winsup/cygwin/tty.cc
winsup/cygwin/tty.h
winsup/cygwin/uinfo.cc
winsup/cygwin/wait.cc
winsup/cygwin/winbase.h
winsup/cygwin/wincap.cc
winsup/cygwin/wincap.h
winsup/cygwin/window.cc
winsup/cygwin/winlean.h
winsup/cygwin/winsup.h
winsup/cygwin/wow64.cc
winsup/cygwin/wow64.h
winsup/cygwin/x86_64.din
winsup/doc/.cvsignore
winsup/doc/ChangeLog
winsup/doc/Makefile.in
winsup/doc/Wishlist
winsup/doc/bodysnatcher.pl
winsup/doc/configure
winsup/doc/configure.ac
winsup/doc/cygserver.xml
winsup/doc/cygwin-api.in.xml
winsup/doc/cygwin-ug-net.xml
winsup/doc/cygwin.xsl
winsup/doc/cygwinenv.xml
winsup/doc/dll.xml
winsup/doc/effectively.xml
winsup/doc/faq-api.xml
winsup/doc/faq-copyright.xml
winsup/doc/faq-programming.xml
winsup/doc/faq-resources.xml
winsup/doc/faq-setup.xml
winsup/doc/faq-using.xml
winsup/doc/faq-what.xml
winsup/doc/faq.xml
winsup/doc/filemodes.xml
winsup/doc/gcc.xml
winsup/doc/gdb.xml
winsup/doc/highlights.xml
winsup/doc/legal.xml
winsup/doc/new-features.xml
winsup/doc/ntsec.xml
winsup/doc/ov-ex-unix.xml
winsup/doc/ov-ex-win.xml
winsup/doc/overview.xml
winsup/doc/pathnames.xml
winsup/doc/programming.xml
winsup/doc/setup-env.xml
winsup/doc/setup-files.xml
winsup/doc/setup-locale.xml
winsup/doc/setup-maxmem.xml
winsup/doc/setup-net.xml
winsup/doc/specialnames.xml
winsup/doc/textbinary.xml
winsup/doc/ug-info.xml
winsup/doc/using.xml
winsup/doc/windres.xml
winsup/doc/xidepend
winsup/lsaauth/ChangeLog
winsup/lsaauth/ChangeLog.64bit
winsup/lsaauth/Makefile.in
winsup/lsaauth/configure
winsup/lsaauth/configure.ac
winsup/utils/ChangeLog
winsup/utils/ChangeLog.64bit
winsup/utils/Makefile.in
winsup/utils/aclocal.m4
winsup/utils/configure
winsup/utils/cygcheck.cc
winsup/utils/dumper.cc
winsup/utils/dumper.h
winsup/utils/kill.cc
winsup/utils/ldd.cc
winsup/utils/locale.cc
winsup/utils/mkgroup.c
winsup/utils/mkpasswd.c
winsup/utils/module_info.cc
winsup/utils/mount.cc
winsup/utils/parse_pe.cc
winsup/utils/passwd.c
winsup/utils/path.cc
winsup/utils/ps.cc
winsup/utils/regtool.cc
winsup/utils/ssp.c
winsup/utils/strace.cc
winsup/utils/tzset.c
winsup/utils/utils.xml
Delete:
COPYING3
COPYING3.LIB
config.rpath
configure.ac
ltgcc.m4
newlib/libc/machine/aarch64/Makefile.am
newlib/libc/machine/aarch64/Makefile.in
newlib/libc/machine/aarch64/aclocal.m4
newlib/libc/machine/aarch64/configure
newlib/libc/machine/aarch64/configure.in
newlib/libc/machine/aarch64/memcmp-stub.c
newlib/libc/machine/aarch64/memcmp.S
newlib/libc/machine/aarch64/memcpy-stub.c
newlib/libc/machine/aarch64/memcpy.S
newlib/libc/machine/aarch64/memmove-stub.c
newlib/libc/machine/aarch64/memmove.S
newlib/libc/machine/aarch64/memset-stub.c
newlib/libc/machine/aarch64/memset.S
newlib/libc/machine/aarch64/setjmp.S
newlib/libc/machine/aarch64/strcmp-stub.c
newlib/libc/machine/aarch64/strcmp.S
newlib/libc/machine/aarch64/strlen-stub.c
newlib/libc/machine/aarch64/strlen.S
newlib/libc/machine/aarch64/strncmp-stub.c
newlib/libc/machine/aarch64/strncmp.S
newlib/libc/machine/aarch64/strnlen-stub.c
newlib/libc/machine/aarch64/strnlen.S
newlib/libc/machine/epiphany/Makefile.am
newlib/libc/machine/epiphany/Makefile.in
newlib/libc/machine/epiphany/aclocal.m4
newlib/libc/machine/epiphany/configure
newlib/libc/machine/epiphany/configure.in
newlib/libc/machine/epiphany/machine/stdlib.h
newlib/libc/machine/epiphany/setjmp.S
newlib/libc/machine/powerpc/times.c
newlib/libc/sys/epiphany/Makefile.am
newlib/libc/sys/epiphany/Makefile.in
newlib/libc/sys/epiphany/aclocal.m4
newlib/libc/sys/epiphany/configure
newlib/libc/sys/epiphany/configure.in
newlib/libc/sys/epiphany/e_printf.c
newlib/libm/machine/aarch64/Makefile.am
newlib/libm/machine/aarch64/Makefile.in
newlib/libm/machine/aarch64/aclocal.m4
newlib/libm/machine/aarch64/configure
newlib/libm/machine/aarch64/configure.in
newlib/libm/machine/aarch64/s_ceil.c
newlib/libm/machine/aarch64/s_floor.c
newlib/libm/machine/aarch64/s_fma.c
newlib/libm/machine/aarch64/s_fmax.c
newlib/libm/machine/aarch64/s_fmin.c
newlib/libm/machine/aarch64/s_llrint.c
newlib/libm/machine/aarch64/s_llround.c
newlib/libm/machine/aarch64/s_lrint.c
newlib/libm/machine/aarch64/s_lround.c
newlib/libm/machine/aarch64/s_nearbyint.c
newlib/libm/machine/aarch64/s_rint.c
newlib/libm/machine/aarch64/s_round.c
newlib/libm/machine/aarch64/s_trunc.c
newlib/libm/machine/aarch64/sf_ceil.c
newlib/libm/machine/aarch64/sf_floor.c
newlib/libm/machine/aarch64/sf_fma.c
newlib/libm/machine/aarch64/sf_fmax.c
newlib/libm/machine/aarch64/sf_fmin.c
newlib/libm/machine/aarch64/sf_llrint.c
newlib/libm/machine/aarch64/sf_llround.c
newlib/libm/machine/aarch64/sf_lrint.c
newlib/libm/machine/aarch64/sf_lround.c
newlib/libm/machine/aarch64/sf_nearbyint.c
newlib/libm/machine/aarch64/sf_rint.c
newlib/libm/machine/aarch64/sf_round.c
newlib/libm/machine/aarch64/sf_trunc.c
winsup/cygwin/cygwin.din
winsup/cygwin/cygwin.sc
winsup/doc/cygserver.sgml
winsup/doc/cygwin-api.in.sgml
winsup/doc/cygwin-ug-net.in.sgml
winsup/doc/cygwin-ug.in.sgml
winsup/doc/cygwin.dsl
winsup/doc/cygwinenv.sgml
winsup/doc/dll.sgml
winsup/doc/effectively.sgml
winsup/doc/faq-sections.xml
winsup/doc/filemodes.sgml
winsup/doc/gcc.sgml
winsup/doc/gdb.sgml
winsup/doc/legal.sgml
winsup/doc/new-features.sgml
winsup/doc/ntsec.sgml
winsup/doc/overview.sgml
winsup/doc/overview2.sgml
winsup/doc/pathnames.sgml
winsup/doc/programming.sgml
winsup/doc/setup-net.sgml
winsup/doc/setup.sgml
winsup/doc/setup2.sgml
winsup/doc/textbinary.sgml
winsup/doc/using.sgml
winsup/doc/windres.sgml
winsup/utils/utils.sgml
Diffstat (limited to 'winsup/doc/pathnames.xml')
-rw-r--r-- | winsup/doc/pathnames.xml | 570 |
1 files changed, 570 insertions, 0 deletions
diff --git a/winsup/doc/pathnames.xml b/winsup/doc/pathnames.xml new file mode 100644 index 000000000..3647253e2 --- /dev/null +++ b/winsup/doc/pathnames.xml @@ -0,0 +1,570 @@ +<?xml version="1.0" encoding='UTF-8'?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"> + +<sect1 id="using-pathnames"><title>Mapping path names</title> + +<sect2 id="pathnames-intro"><title>Introduction</title> + +<para>Cygwin supports both POSIX- and Win32-style paths. Directory +delimiters may be either forward slashes or backslashes. Paths using +backslashes or starting with a drive letter are always handled as +Win32 paths. POSIX paths must only use forward slashes as delimiter, +otherwise they are treated as Win32 paths and file access might fail +in surprising ways.</para> + +<note><para>The usage of Win32 paths, though possible, is deprecated, +since it circumvents important internal path handling mechanisms. +See <xref linkend="pathnames-win32"></xref> and +<xref linkend="pathnames-win32-api"></xref> for more information. +</para></note> + +<para>POSIX operating systems (such as Linux) do not have the concept +of drive letters. Instead, all absolute paths begin with a +slash (instead of a drive letter such as "c:") and all file systems +appear as subdirectories (for example, you might buy a new disk and +make it be the <filename>/disk2</filename> directory).</para> + +<para>Because many programs written to run on UNIX systems assume +the existence of a single unified POSIX file system structure, Cygwin +maintains a special internal POSIX view of the Win32 file system +that allows these programs to successfully run under Windows. Cygwin +uses this mapping to translate from POSIX to Win32 paths as +necessary.</para> + +</sect2> + +<sect2 id="mount-table"><title>The Cygwin Mount Table</title> + +<para>The <filename>/etc/fstab</filename> file is used to map Win32 +drives and network shares into Cygwin's internal POSIX directory tree. +This is a similar concept to the typical UNIX fstab file. The mount +points stored in <filename>/etc/fstab</filename> are globally set for +all users. Sometimes there's a requirement to have user specific +mount points. The Cygwin DLL supports user specific fstab files. +These are stored in the directory <filename>/etc/fstab.d</filename> +and the name of the file is the Cygwin username of the user, as it's +stored in the <filename>/etc/passwd</filename> file. The structure of the +user specific file is identical to the system-wide +<filename>fstab</filename> file.</para> + +<para>The file fstab contains descriptive information about the various file +systems. fstab is only read by programs, and not written; it is the +duty of the system administrator to properly create and maintain this +file. Each filesystem is described on a separate line; fields on each +line are separated by tabs or spaces. Lines starting with '#' are +comments.</para> + +<para>The first field describes the block special device or +remote filesystem to be mounted. On Cygwin, this is the native Windows +path which the mount point links in. As path separator you MUST use a +slash. Usage of a backslash might lead to unexpected results. UNC +paths (using slashes, not backslashes) are allowed. If the path +contains spaces these can be escaped as <literal>'\040'</literal>.</para> + +<para>The second field describes the mount point for the filesystem. +If the name of the mount point contains spaces these can be +escaped as '\040'.</para> + +<para>The third field describes the type of the filesystem. Cygwin supports +any string here, since the file system type is usually not evaluated. So it +doesn't matter if you write <literal>FAT</literal> into this field even if +the filesystem is NTFS. Cygwin figures out the filesystem type and its +capabilities by itself.</para> + +<para>The only exception is the file system type cygdrive. This type is +used to set the cygdrive prefix. For a description of the cygdrive prefix +see <xref linkend="cygdrive"></xref></para> + +<para>The fourth field describes the mount options associated +with the filesystem. It is formatted as a comma separated list of +options. It contains at least the type of mount (binary or text) plus +any additional options appropriate to the filesystem type. Recognized +options are binary, text, nouser, user, exec, notexec, cygexec, nosuid, +posix=[0|1]. The meaning of the options is as follows.</para> + +<screen> + acl - Cygwin uses the filesystem's access control lists (ACLs) to + implement real POSIX permissions (default). This flag only + affects filesystems supporting ACLs (NTFS, for instance) and + is ignored otherwise. + auto - Ignored. + binary - Files default to binary mode (default). + bind - Allows to remount part of the file hierarchy somewhere else. + In contrast to other entries, the first field in the fstab + line specifies an absolute POSIX path. This path is remounted + to the POSIX path specified as the second path. The conversion + to a Win32 path is done on the fly. Only the root path and + paths preceding the bind entry in the fstab file are used to + convert the POSIX path in the first field to an absolute Win32 + path. Note that symlinks are ignored while performing this path + conversion. + cygexec - Treat all files below mount point as cygwin executables. + dos - Always convert leading spaces and trailing dots and spaces to + characters in the UNICODE private use area. This allows to use + broken filesystems which only allow DOS filenames, even if they + are not recognized as such by Cygwin. + exec - Treat all files below mount point as executable. + ihash - Always fake inode numbers rather than using the ones returned + by the filesystem. This allows to use broken filesystems which + don't return unambiguous inode numbers, even if they are not + recognized as such by Cygwin. + noacl - Cygwin ignores filesystem ACLs and only fakes a subset of + permission bits based on the DOS readonly attribute. This + behaviour is the default on FAT and FAT32. The flag is + ignored on NFS filesystems. + nosuid - No suid files are allowed (currently unimplemented). + notexec - Treat all files below mount point as not executable. + nouser - Mount is a system-wide mount. + override - Force the override of an immutable mount point (currently "/"). + posix=0 - Switch off case sensitivity for paths under this mount point + (default for the cygdrive prefix). + posix=1 - Switch on case sensitivity for paths under this mount point + (default for all other mount points). + sparse - Switch on support for sparse files. This option only makes + sense on NTFS and then only if you really need sparse files. + Cygwin does not try to create sparse files by default for + performance reasons. + text - Files default to CRLF text mode line endings. + user - Mount is a user mount. +</screen> + +<para>While normally the execute permission bits are used to evaluate +executability, this is not possible on filesystems which don't support +permissions at all (like FAT/FAT32), or if ACLs are ignored on filesystems +supporting them (see the aforementioned <literal>acl</literal> mount option). +In these cases, the following heuristic is used to evaluate if a file is +executable: Files ending in certain extensions (.exe, .com, .bat, .btm, +.cmd) are assumed to be executable. Files whose first two characters begin +with '#!' are also considered to be executable. +The <literal>exec</literal> option is used to instruct Cygwin that the +mounted file is "executable". If the <literal>exec</literal> option is used +with a directory then all files in the directory are executable. +This option allows other files to be marked as executable and avoids the +overhead of opening each file to check for a '#!'. The +<literal>cygexec</literal> option is very similar to <literal>exec</literal>, +but also prevents Cygwin from setting up commands and environment variables +for a normal Windows program, adding another small performance gain. The +opposite of these options is the <literal>notexec</literal> option, which +means that no files should be marked as executable under that mount point.</para> +<para>A correct root directory is quite essential to the operation of +Cygwin. A default root directory is evaluated at startup so a +<filename>fstab</filename> entry for the root directory is not necessary. +If it's wrong, nothing will work as expected. Therefore, the root directory +evaluated by Cygwin itself is treated as an immutable mount point and can't +be overridden in /etc/fstab... unless you think you really know what you're +doing. In this case, use the <literal>override</literal> flag in the options +field in the <filename>/etc/fstab</filename> file. Since this is a dangerous +thing to do, do so at your own risk.</para> + +<para><filename>/usr/bin</filename> and <filename>/usr/lib</filename> are +by default also automatic mount points generated by the Cygwin DLL similar +to the way the root directory is evaluated. <filename>/usr/bin</filename> +points to the directory the Cygwin DLL is installed in, +<filename>/usr/lib</filename> is supposed to point to the +<filename>/lib</filename> directory. This choice is safe and usually +shouldn't be changed. An fstab entry for them is not required.</para> + +<para><literal>nouser</literal> mount points are not overridable by a later +call to <command>mount</command>. +Mount points given in <filename>/etc/fstab</filename> are by default +<literal>nouser</literal> mount points, unless you specify the option +<literal>user</literal>. This allows the administrator to set certain +paths so that they are not overridable by users. In contrast, all mount +points in the user specific fstab file are <literal>user</literal> mount +points.</para> + +<para>The fifth and sixth field are ignored. They are +so far only specified to keep a Linux-like fstab file layout.</para> + +<para>Note that you don't have to specify an fstab entry for the root dir, +unless you want to have the root dir pointing to somewhere entirely +different (hopefully you know what you're doing), or if you want to +mount the root dir with special options (for instance, as text mount).</para> + +<para>Example entries:</para> + +<itemizedlist spacing="compact"> +<listitem> + <para>Just a normal mount point:</para> + <screen> c:/foo /bar fat32 binary 0 0</screen> +</listitem> +<listitem> + <para>A mount point for a textmode mount with case sensitivity switched off:</para> + <screen> C:/foo /bar/baz ntfs text,posix=0 0 0</screen> +</listitem> +<listitem> + <para>A mount point for a Windows directory with spaces in it:</para> + <screen> C:/Documents\040and\040Settings /docs ext3 binary 0 0</screen> +</listitem> +<listitem> + <para>A mount point for a remote directory, don't store POSIX permissions in ACLs:</para> + <screen> //server/share/subdir /srv/subdir smbfs binary,noacl 0 0</screen> +</listitem> +<listitem> + <para>This is just a comment:</para> + <screen> # This is just a comment</screen> +</listitem> +<listitem> + <para>Set the cygdrive prefix to /mnt:</para> + <screen> none /mnt cygdrive binary 0 0</screen> +</listitem> +<listitem> + <para>Remount /var to /usr/var:</para> + <screen> /var /usr/var none bind</screen> + <para>Assuming <filename>/var</filename> points to + <filename>C:/cygwin/var</filename>, <filename>/usr/var</filename> now + also points to <filename>C:/cygwin/var</filename>. This is equivalent + to the Linux <literal>bind</literal> option available since + Linux 2.4.0.</para> +</listitem> +</itemizedlist> + +<para>Whenever Cygwin generates a Win32 path from a POSIX one, it uses +the longest matching prefix in the mount table. Thus, if +<filename>C:</filename> is mounted as <filename>/c</filename> and also +as <filename>/</filename>, then Cygwin would translate +<filename>C:/foo/bar</filename> to <filename>/c/foo/bar</filename>. +This translation is normally only used when trying to derive the +POSIX equivalent current directory. Otherwise, the handling of MS-DOS +filenames bypasses the mount table. +</para> + +<para>If you want to see the current set of mount points valid in your +session, you can invoke the Cygwin tool <command>mount</command> without +arguments:</para> + +<example id="pathnames-mount-ex"> +<title>Displaying the current set of mount points</title> +<screen> + <prompt>bash$</prompt> <userinput>mount</userinput> + f:/cygwin/bin on /usr/bin type ntfs (binary,auto) + f:/cygwin/lib on /usr/lib type ntfs (binary,auto) + f:/cygwin on / type ntfs (binary,auto) + e:/src on /usr/src type vfat (binary) + c: on /cygdrive/c type ntfs (binary,posix=0,user,noumount,auto) + e: on /cygdrive/e type vfat (binary,posix=0,user,noumount,auto) +</screen> +</example> + +<para>You can also use the <command>mount</command> command to add +new mount points, and the <command>umount</command> to delete +them. However, since they are only stored in memory, these mount +points will disappear as soon as your last Cygwin process ends. +See <xref linkend="mount"></xref> and <xref linkend="umount"></xref> for more +information.</para> + +<note><para> +When you upgrade an existing older Cygwin installation to Cygwin 1.7, +your old system mount points (stored in the HKEY_LOCAL_MACHINE branch +of your registry) are read by a script and the <filename>/etc/fstab</filename> +file is generated from these entries. Note that entries for +<filename>/</filename>, <filename>/usr/bin</filename>, and +<filename>/usr/lib</filename> are <emphasis role='bold'>never</emphasis> +generated. +</para> + +<para> +The old user mount points in your HKEY_CURRENT_USER branch of the registry +are not used to generate <filename>/etc/fstab</filename>. If you want +to create a user specific <filename>/etc/fstab.d/${USER}</filename> file +from your old entries, there's a script available which does exactly +that for you, <filename>/bin/copy-user-registry-fstab</filename>. Just +start the script and it will create your user specific fstab file. Stop +all your Cygwin processes and restart them, and you can simply use your +old user mount points as before. +</para></note> + +</sect2> + +<sect2 id="unc-paths"><title>UNC paths</title> + +<para>Apart from the unified POSIX tree starting at the <filename>/</filename> +directory, UNC pathnames starting with two slashes and a server name +(<filename>//machine/share/...</filename>) are supported as well. +They are handled as POSIX paths if only containing forward slashes. There's +also a virtual directory <filename>//</filename> which allows to enumerate +the fileservers known to the local machine with <command>ls</command>. +Same goes for the UNC paths of the type <filename>//machine</filename>, +which allow to enumerate the shares provided by the server +<literal>machine</literal>. For often used UNC paths it makes sense to +add them to the mount table (see <xref linkend="mount-table"></xref> so +they are included in the unified POSIX path tree.</para> + +</sect2> + +<sect2 id="cygdrive"><title>The cygdrive path prefix</title> + +<para>As already outlined in <xref linkend="ov-hi-files"></xref>, you can +access arbitary drives on your system by using the cygdrive path prefix. +The default value for this prefix is <filename>/cygdrive</filename>, and +a path to any drive can be constructed by using the cygdrive prefix and +appending the drive letter as subdirectory, like this:</para> + +<screen> + bash$ ls -l /cygdrive/f/somedir +</screen> + +<para>This lists the content of the directory F:\somedir.</para> + +<para>The cygdrive prefix is a virtual directory under which all drives +on a system are subsumed. The mount options of the cygdrive prefix is +used for all file access through the cygdrive prefixed drives. For instance, +assuming the cygdrive mount options are <literal>binary,posix=0</literal>, +then any file <filename>/cygdrive/x/file</filename> will be opened in +binary mode by default (mount option <literal>binary</literal>), and the case +of the filename doesn't matter (mount option <literal>posix=0</literal>). +</para> + +<para>The cygdrive prefix flags are also used for all UNC paths starting with +two slashes, unless they are accessed through a mount point. For instance, +consider these <filename>/etc/fstab</filename> entries:</para> + +<screen> + //server/share /mysrv ntfs posix=1,acl 0 0 + none /cygdrive cygdrive posix=0,noacl 0 0 +</screen> + +<para>Assume there's a file <filename>\\server\share\foo</filename> on the +share. When accessing it as <filename>/mysrv/foo</filename>, then the flags +<literal>posix=1,acl</literal> of the /mysrv mount point are used. When +accessing it as <filename>//server/share/foo</filename>, then the flags +for the cygdrive prefix, <literal>posix=0,noacl</literal> are used.</para> + +<note><para>This only applies to UNC paths using forward slashes. When +using backslashes the flags for native paths are used. See +<xref linkend="pathnames-win32"></xref>.</para></note> + +<para>The cygdrive prefix may be changed in the fstab file as outlined above. +Please note that you must not use the cygdrive prefix for any other mount +point. For instance this:</para> + +<screen> + none /cygdrive cygdrive binary 0 0 + D: /cygdrive/d somefs text 0 0 +</screen> + +<para>will not make file access using the /mnt/d path prefix suddenly using +textmode. If you want to mount any drive explicitly in another mode than +the cygdrive prefix, use a distinct path prefix:</para> + +<screen> + none /cygdrive cygdrive binary 0 0 + D: /mnt/d somefs text 0 0 +</screen> + +</sect2> + +<sect2 id="pathnames-symlinks"><title>Symbolic links</title> + +<para>Symbolic links are not present and supported on Windows until Windows +Vista/Server 2008, and then only on some filesystems. Since POSIX applications +are rightfully expecting to use symlinks and the +<literal>symlink(2)</literal> system call, Cygwin had to find a +workaround for this Windows flaw.</para> + +<para>Cygwin creates symbolic links potentially in multiple different +ways:</para> + +<itemizedlist mark="bullet"> + +<listitem> +<para>The default symlinks are plain files containing a magic cookie +followed by the path to which the link points. They are marked with the +DOS SYSTEM attribute so that only files with that attribute have to be +read to determine whether or not the file is a symbolic link.</para> + +<note><para>Starting with Cygwin 1.7, symbolic links are using UTF-16 to encode +the filename of the target file, to better support internationalization. +Symlinks created by older Cygwin releases can be read just fine. However, +you could run into problems with them if you're now using another character +set than the one you used when creating these symlinks +(see <xref linkend="setup-locale-problems"></xref>). Please note that this +new UTF-16 style of symlinks is not compatible with older Cygwin release, +which can't read the target filename correctly.</para></note> +</listitem> + +<listitem> +<para>The shortcut style symlinks are Windows <literal>.lnk</literal> +shortcut files with a special header and the DOS READONLY attribute set. +This symlink type is created if the environment variable +<literal>CYGWIN</literal> (see <xref linkend="using-cygwinenv"></xref>) +is set to contain the string <literal>winsymlinks</literal> or +<literal>winsymlinks:lnk</literal>. On the MVFS filesystem, which does +not support the DOS SYSTEM attribute, this is the one and only supported +symlink type, independently from the <literal>winsymlinks</literal> +setting.</para> +</listitem> + +<listitem> +<para>Native Windows symlinks are only created on Windows Vista/2008 and later, +and only on filesystems supporting reparse points. Due to to their weird +restrictions and behaviour, they are only created if the user +explicitely requests creating them. This is done by setting the +environment variable <literal>CYGWIN</literal> to contain the string +<literal>winsymlinks:native</literal> or +<literal>winsymlinks:nativestrict</literal>. For the difference between +these two settings, see <xref linkend="using-cygwinenv"></xref>. +On AFS, native symlinks are the only supported type of symlink due to +AFS lacking support for DOS attributes. This is independent from the +<literal>winsymlinks</literal> setting.</para> +</listitem> + +<listitem> +<para>On the NFS filesystem, Cygwin always creates real NFS symlinks.</para> +</listitem> + +</itemizedlist> + +<para>All of the above four symlink types are recognized and used as symlinks +under all circumstances. However, if the default plain file symlink type +is lacking its DOS SYSTEM bit, or if the shortcut file is lacking the DOS +READONLY attribute, they are not recognized as symlink.</para> + +<para>Apart from these four types, there's also a fifth type, which is +recognized as symlink but never generated by Cygwin, directory +junctions. This is an older reparse point type, supported by Windows +since Windows 2000. Filesystem junctions on the other hand are not +handled as symlinks, since otherwise they would not be recognized as +filesystem borders by commands like <command>find -xdev</command>.</para> + +</sect2> + +<sect2 id="pathnames-win32"><title>Using native Win32 paths</title> + +<para>Using native Win32 paths in Cygwin, while possible, is generally +inadvisable. Those paths circumvent all internal integrity checking and +bypass the information given in the Cygwin mount table.</para> + +<para>The following paths are treated as native Win32 paths in Cygwin:</para> + +<itemizedlist spacing="compact"> + <listitem> + <para>All paths starting with a drive specifier</para> +<screen> + C:\foo + C:/foo +</screen> + </listitem> + <listitem> + <para>All paths containing at least one backslash as path component</para> +<screen> + C:/foo/bar<emphasis role='bold'>\</emphasis>baz/... +</screen> + </listitem> + <listitem> + <para>UNC paths using backslashes</para> +<screen> + \\server\share\... +</screen> + </listitem> +</itemizedlist> + +<para>When accessing files using native Win32 paths as above, Cygwin uses a +default setting for the mount flags. All paths using DOS notation will be +treated as case insensitive, and permissions are just faked as if the +underlying drive is a FAT drive. This also applies to NTFS and other +filesystems which usually are capable of case sensitivity and storing +permissions.</para> + +</sect2> + +<sect2 id="pathnames-win32-api"><title>Using the Win32 file API in Cygwin applications</title> + +<para>Special care must be taken if your application uses Win32 file API +functions like <function>CreateFile</function> to access files using +relative pathnames, or if your application uses functions like +<function>CreateProcess</function> or <function>ShellExecute</function> +to start other applications.</para> + +<para>When a Cygwin application is started, the Windows idea of the current +working directory (CWD) is not necessarily the same as the Cygwin CWD. +There are a couple of restrictions in the Win32 API, which disallow certain +directories as Win32 CWD:</para> + +<itemizedlist spacing="compact"> + <listitem> + <para>The Windows subsystem only supports CWD paths of up to 258 chars. + This restriction doesn't apply for Cygwin processes, at least not as + long as they use the POSIX API (chdir, getcwd). This means, if a Cygwin + process has a CWD using an absolute path longer than 258 characters, the + Cygwin CWD and the Windows CWD differ.</para> + </listitem> + + <listitem> + <para>The Win32 API call to set the current directory, + <function>SetCurrentDirectory</function>, fails for directories for which + the user has no permissions, even if the user is an administrator. This + restriction doesn't apply for Cygwin processes, if they are running under + an administrator account.</para> + </listitem> + + <listitem> + <para><function>SetCurrentDirectory</function> does not support + case-sensitive filenames. + </para> + </listitem> + + <listitem> + <para>Last, but not least, <function>SetCurrentDirectory</function> can't + work on virtual Cygwin paths like /proc or /cygdrive. These paths only + exists in the Cygwin realm so they have no meaning to a native Win32 + process.</para> + </listitem> +</itemizedlist> + +<para>As long as the Cygwin CWD is usable as Windows CWD, the Cygwin and +Windows CWDs are in sync within a process. However, if the Cygwin process +changes its working directory into one of the directories which are +unusable as Windows CWD, we're in trouble. If the process uses the +Win32 API to access a file using a relative pathname, the resulting +absolute path would not match the expectations of the process. In the +worst case, the wrong files are deleted.</para> + +<para>To workaround this problem, Cygwin sets the Windows CWD to a special +directory in this case. This special directory points to a virtual +filesystem within the native NT namespace (<filename>\??\PIPE\</filename>). +Since it's not a real filesystem, the deliberate effect is that a call to, +for instance, <function>CreateFile ("foo", ...);</function> will fail, +as long as the processes CWD doesn't work as Windows CWD.</para> + +<para>So, in general, don't use the Win32 file API in Cygwin applications. +If you <emphasis role='bold'>really</emphasis> need to access files using +the Win32 API, or if you <emphasis role='bold'>really</emphasis> have to use +<function>CreateProcess</function> to start applications, rather than +the POSIX <function>exec(3)</function> family of functions, you have to +make sure that the Cygwin CWD is set to some directory which is valid as +Win32 CWD.</para> + +</sect2> + +<sect2 id="pathnames-additional"><title>Additional Path-related Information</title> + +<para>The <command>cygpath</command> program provides the ability to +translate between Win32 and POSIX pathnames in shell scripts. See +<xref linkend="cygpath"></xref> for the details.</para> + +<para>The <envar>HOME</envar>, <envar>PATH</envar>, and +<envar>LD_LIBRARY_PATH</envar> environment variables are automatically +converted from Win32 format to POSIX format (e.g. from +<filename>c:/cygwin\bin</filename> to <filename>/bin</filename>, if +there was a mount from that Win32 path to that POSIX path) when a Cygwin +process first starts.</para> + +<para>Symbolic links can also be used to map Win32 pathnames to POSIX. +For example, the command +<command>ln -s //pollux/home/joe/data /data</command> would have about +the same effect as creating a mount point from +<filename>//pollux/home/joe/data</filename> to <filename>/data</filename> +using <command>mount</command>, except that symbolic links cannot set +the default file access mode. Other differences are that the mapping is +distributed throughout the file system and proceeds by iteratively +walking the directory tree instead of matching the longest prefix in a +kernel table. Note that symbolic links will only work on network +drives that are properly configured to support the "system" file +attribute. Many do not do so by default (the Unix Samba server does +not by default, for example).</para> + +</sect2> + +</sect1> |