perlcygwin - Cygwin 的 Perl
本文档将帮助您在 Cygwin 上配置、制作、测试和安装 Perl。本文档还介绍了 Cygwin 的功能,这些功能将影响 Perl 在运行时的行为。
注意:Cygwin 有可用的预编译 Perl 软件包,并且在正常的 Cygwin 安装中提供了 Perl 版本。如果您不需要自定义配置,请考虑使用其中一个软件包。
Cygwin 工具是流行的 GNU 开发工具的 Win32 平台移植。它们得益于 Cygwin 库的运行,该库提供了 UNIX 系统调用和这些程序期望的环境。有关此项目的更多信息,请访问
需要最新的网络或商业版 Cygwin。
在本文档上次更新时,Cygwin 3.0.7 为最新版本。
在构建 Perl 时,可能需要对 Cygwin 设置进行一些更改,以便 Perl 能够干净地构建。对于正常的 Perl 使用,不需要进行这些更改。
注意:构建的二进制文件将在所有 Win32 版本上运行。它们不依赖于您的主机系统或 Cygwin 配置(二进制/文本挂载、cygserver)。唯一的依赖关系来自硬编码路径名,如 /usr/local。但是,您的主机系统和 Cygwin 配置会影响 Perl 的运行时行为(请参阅 "TEST")。
PATH
设置 PATH
环境变量,以便 Configure 找到 Cygwin 版本的程序。应删除或移至 PATH
末尾任何不必要的 Windows 目录。
nroff
如果您没有 nroff(它是 groff 软件包的一部分),Configure 不会提示您安装 man 页面。
在 hints/cygwin.sh 的帮助下,Configure 收集的默认选项将构建一个支持动态加载的 Perl(需要一个共享的 cygperl5_16.dll)。
这将运行 Configure 并保留记录
./Configure 2>&1 | tee log.configure
如果您愿意接受所有默认值,请使用 -de 运行 Configure。但是,有几个有用的自定义项可用。
可以剥离构建过程创建的 EXE 和 DLL。生成的二进制文件将明显更小。如果您希望剥离二进制文件,可以在 Configure 提示时添加 -s 选项,
Any additional ld flags (NOT including libraries)? [none] -s
Any special flags to pass to g++ to create a dynamically loaded
library?
[none] -s
Any special flags to pass to gcc to use dynamic linking? [none] -s
或者,您可以编辑 hints/cygwin.sh 并取消注释文件末尾附近的相关变量。
一些 Perl 函数和模块依赖于某些可选库的存在。如果这些库安装在列为用于库搜索的目录之一中,Configure 将找到它们。大多数库的预构建软件包可从 Cygwin 安装程序中获取。
-lcrypt
随 Cygwin 发行的 crypt 软件包是 Corinna Vinschen 开发的与 Linux 兼容的 56 位 DES crypt 端口。
或者,GNU libc 中的 crypt 库已移植到 Cygwin。
从 libcrypt 1.3(2016 年 3 月)开始,您需要安装 libcrypt-devel 软件包,以便 Configure 检测 crypt()。
-lgdbm_compat
(use GDBM_File
)
GDBM 可用于 Cygwin。
注意:GDBM 库仅适用于 NTFS 分区。
-ldb
(use DB_File
)
BerkeleyDB 可用于 Cygwin。
注意:BerkeleyDB 库仅在 NTFS 分区上完全可用。
cygserver
(use IPC::SysV
)
SysV IPC 的端口可用于 Cygwin。
注意:这尚未经过广泛测试。特别是,d_semctl_semun
未定义,因为它无法通过配置测试。它还会创建编译时依赖项,因为 perl.h 包含 <sys/ipc.h> 和 <sys/sem.h>(将来编译 CPAN 模块时需要)。当前不支持!
-lutil
标准 Cygwin netrelease 中包含 inetutils 软件包,其中包括 libutil.a。
INSTALL 文档描述了几个配置时选项。其中一些选项适用于 Cygwin,而另一些选项目前还不可用。此外,其中一些选项是实验性的。您可以在配置提示您时选择一个选项,也可以在命令行上定义(取消定义)符号。
-Uusedl
取消定义此符号将强制 Perl 以静态方式编译。
-Dusemymalloc
默认情况下,Perl 不使用 Perl 源代码中包含的 malloc()
,因为它速度较慢且不是完全线程安全的。如果您想强制 Perl 使用旧的 -Dusemymalloc 构建,请定义此选项。
-Uuseperlio
取消定义此符号将禁用 PerlIO 抽象。PerlIO 现在是默认值;不建议禁用 PerlIO。
-Dusemultiplicity
将 Perl 嵌入到 C 程序中并使用多个解释器实例时,需要使用 Multiplicity。仅当您使用 -Uuseithreads
构建非线程 perl 时才需要此选项。
-Uuse64bitint
默认情况下,Perl 使用 64 位整数。如果您想使用较小的 32 位整数,请定义此符号。
-Duselongdouble
gcc 支持长双精度(12 个字节)。但是,要在 Perl 中使用它们,需要几个额外的长双精度数学函数({atan2, cos, exp, floor, fmod, frexp, isnan, log, modf, pow, sin, sqrt}l, strtold)。这些函数在 Cygwin libc newlib 中尚未提供。
-Uuseithreads
如果您想要速度更快的非线程 perl,请定义此符号。
-Duselargefiles
Cygwin 使用 64 位整数进行内部大小和位置计算,配置将正确检测并定义此选项。
-Dmksymlinks
使用此选项在源代码树外部构建 perl。可以在 INSTALL 文档中找到详细信息。这是从源代码构建 perl 的推荐方法。
只需运行 make 并等待
make -jn 2>&1 | tee log.make
其中 n 是您希望同时进行的最大编译数;省略此参数与指定 -j1
相同。
运行测试套件有两个步骤
make test 2>&1 | tee log.make-test
cd t; ./perl harness 2>&1 | tee ../log.harness
两次运行相同的测试,但以 ./perl harness
运行时会提供更多信息,并且您可以通过指定以下内容来并行运行测试
cd t; TEST_JOBS=n ./perl harness 2>&1 | tee ../log.harness
其中 n 是同时运行的最大测试数。
测试结果会根据您的主机系统和 Cygwin 配置而有所不同。如果某个测试可以在某些 Cygwin 设置中通过,则始终会尝试该测试,并且会记录可解释的测试失败。Perl 有可能通过所有测试,但更有可能由于以下原因之一而导致某些测试失败。
UNIX 文件权限基于 {read,write,execute} 的模式位集,分别针对 {user,group,other}。默认情况下,Cygwin 仅跟踪表示为 UNIX 文件用户写位(文件始终可读,如果文件具有 .{com,bat,exe} 扩展名或以 #!
开头,则文件可执行,目录始终可读且可执行)。在具有 ntea CYGWIN
设置的 WinNT 上,其他模式位存储为扩展文件属性。在具有默认 ntsec CYGWIN
设置的 WinNT 上,权限使用标准 WinNT 安全描述符和访问控制列表。如果没有这些选项之一,则这些测试将失败(列表尚未更新)
Failed Test List of failed
------------------------------------
io/fs.t 5, 7, 9-10
lib/anydbm.t 2
lib/db-btree.t 20
lib/db-hash.t 16
lib/db-recno.t 18
lib/gdbm.t 2
lib/ndbm.t 2
lib/odbm.t 2
lib/sdbm.t 2
op/stat.t 9, 20 (.tmp not an executable extension)
不要在 FAT 文件系统上使用 NDBM_File 或 ODBM_File。它们可以在 FAT 文件系统上构建,但许多测试将失败
../ext/NDBM_File/ndbm.t 13 3328 71 59 83.10% 1-2 4 16-71
../ext/ODBM_File/odbm.t 255 65280 ?? ?? % ??
../lib/AnyDBM_File.t 2 512 12 2 16.67% 1 4
../lib/Memoize/t/errors.t 0 139 11 5 45.45% 7-11
../lib/Memoize/t/tie_ndbm.t 13 3328 4 4 100.00% 1-4
run/fresh_perl.t 97 1 1.03% 91
如果您打算仅在 FAT 上运行(或在 FAT 上使用 AnyDBM_File),请使用 -Ui_ndbm 和 -Ui_dbm 选项运行 Configure,以防止构建 NDBM_File 和 ODBM_File。
对于 NTFS(并且没有 CYGWIN=nontsec),即使 perl 是在 FAT 上构建的,也不应该有任何问题。
fork()
失败fork()
失败可能导致以下测试失败
ext/IO/lib/IO/t/io_multihomed.t
ext/IO/lib/IO/t/io_sock.t
ext/IO/lib/IO/t/io_unix.t
请参阅下方的 "杂项" 中关于 fork 的注释。
Cygwin 在 Win32 系统上提供类 UNIX 语义方面做得非常出色。但是,除了上面提到的项目之外,还有一些您应该了解的差异。这是一份非常简短的可移植性指南,更多信息可以在 Cygwin 文档中找到。
路径名
Cygwin 路径名由正斜杠 (/) 分隔,通用命名代码 (//UNC) 也受支持。由于 cygwin-1.7,不应使用非 POSIX 路径名。名称可能包含所有可打印字符。
文件名不区分大小写,但保留大小写。包含反斜杠或驱动器号的路径名是 Win32 路径名,不受应用于 POSIX 样式路径名的转换的影响,但 cygwin 会警告您,因此最好将它们转换为 POSIX。
对于转换,我们有 Cygwin::win_to_posix_path()
和 Cygwin::posix_to_win_path()
。
由于 cygwin-1.7 路径名是 UTF-8 编码的。
文本/二进制
由于 cygwin-1.7 文本装载已弃用且强烈不建议使用。
打开文件时,它处于文本模式或二进制模式。在文本模式下,文件会受到 CR/LF/Ctrl-Z 转换的影响。使用 Cygwin 时,open()
的默认模式由文件底层装载的模式决定。请参阅 "Cygwin::is_binmount"()。Perl 提供了一个 binmode()
函数,用于对原本将被视为文本的文件设置二进制模式。带有 O_TEXT
标志的 sysopen()
对原本将被视为二进制的文件设置文本模式。
sysopen(FOO, "bar", O_WRONLY|O_CREAT|O_TEXT)
lseek()
、tell()
和 sysseek()
仅适用于以二进制模式打开的文件。
文本/二进制问题在 Cygwin 文档中得到了详细介绍。
PerlIO
PerlIO 覆盖了默认的 Cygwin 文本/二进制行为。文件将始终被视为二进制文件,无论其所在的装载模式如何,就像在 UNIX 中一样。因此,需要在 open()
调用中请求 CR/LF 转换,如下所示
open(FH, ">:crlf", "out.txt");
这将在输出上将 LF 转换为 CR/LF,或在环境设置中(将其添加到您的 .bashrc 中)
export PERLIO=crlf
这将引入 crlf PerlIO 层,该层对 perl 生成的每个输出执行 LF -> CRLF 转换。
.exe
Cygwin stat()
、lstat()
和 readlink()
函数通过在您询问 foo 时查找 foo.exe(除非 foo 也存在)来使 .exe 扩展名透明。Cygwin 不需要 .exe 扩展名,但 gcc 在构建程序时会自动添加它。但是,在以普通文件形式访问可执行文件时(例如,makefile 中的 cp),.exe 不会透明。Cygwin 附带的 install 程序会在必要时自动追加 .exe。
Cygwin 与 Windows 进程 ID
Cygwin 进程有自己的 pid,它与底层 Windows pid 不同。大多数符合 posix 标准的 Proc 函数都期望使用 Cygwin pid,但一些 Win32::Process 函数期望使用 winpid。例如,$$
是 /usr/bin/perl 的 Cygwin pid,它不是 winpid。使用 Cygwin::pid_to_winpid()
和 Cygwin::winpid_to_pid()
在它们之间进行转换。
Cygwin 与 Windows 错误
在 Cygwin 中,$^E 与 $! 相同。在使用 Win32 API 函数 时,使用 Win32::GetLastError()
获取最后一个 Windows 错误。
fork 或 system 上的重新定位错误
在加载多个 dll 后使用 fork()
或 system()
进入另一个 perl 可能会导致 DLL 基址冲突。内部 cygwin 错误类似于以下内容
0 [main] perl 8916 child_info_fork::abort: data segment start:
parent (0xC1A000) != child(0xA6A000)
或
183 [main] perl 3588 C:\cygwin\bin\perl.exe: *** fatal error -
unable to remap C:\cygwin\bin\cygsvn_subr-1-0.dll to same address
as parent(0x6FB30000) != 0x6FE60000 46 [main] perl 3488 fork: child
3588 - died waiting for dll loading, errno11
请参阅 https://cygwin.com/faq/faq.html#faq.using.fixing-fork-failures 如果内存中加载的 DLL 不太多,则有助于增大可用地址空间,例如,停止 MS Internet Explorer 可能会提供帮助。
+使用重新定位实用程序来解决冲突的 dll 地址。重新定位包包含在 Cygwin 设置中。使用 https://cygwin.com/install.html 中的 setup.exe 进行安装。
1. 终止所有 perl 进程并运行 </bin/find <dir
-xdev -name \*.dll | /bin/rebase -OT ->> 或
2. 终止所有 cygwin 进程和服务,并运行 setup.exe。
其他
使用 F_GETLK
命令对 fcntl()
进行文件锁定是一个存根,它返回 ENOSYS
。
Cygwin chroot()
实现有漏洞(它无法限制本机 Win32 程序的文件访问权限)。
由于 Windows 限制,不执行文件备份 perl -i.bak
的 perl -i
文件就地编辑不起作用,因此,如果您在不指定备份扩展名的情况下使用 perl -i
,Perl 会自动添加后缀 .bak
。
Cwd::cwd
返回当前工作目录。
Cygwin::pid_to_winpid
将 Cygwin pid 转换为相应的 Windows pid(可能相同,也可能不同)。
Cygwin::winpid_to_pid
将 Windows pid 转换为相应的 Cygwin pid(如果存在)。
Cygwin::win_to_posix_path
将 Windows 路径转换为相应的 Cygwin 路径,并遵循当前装入点。使用第二个非空参数返回绝对路径。双字节字符不会被转换。
Cygwin::posix_to_win_path
将 Cygwin 路径转换为相应的 Cygwin 路径,并遵循当前装入点。使用第二个非空参数返回绝对路径。双字节字符不会被转换。
Cygwin::mount_table()
返回 [mnt_dir, mnt_fsname, mnt_type, mnt_opts] 数组。
perl -e 'for $i (Cygwin::mount_table) {print join(" ",@$i),"\n";}'
/bin c:\cygwin\bin system binmode,cygexec
/usr/bin c:\cygwin\bin system binmode
/usr/lib c:\cygwin\lib system binmode
/ c:\cygwin system binmode
/cygdrive/c c: system binmode,noumount
/cygdrive/d d: system binmode,noumount
/cygdrive/e e: system binmode,noumount
Cygwin::mount_flags
返回指定装载点的装载类型和标志。mntent->mnt_type(始终为“system”或“user”)的逗号分隔字符串,然后为 mntent->mnt_opts,其中第一个始终为“binmode”或“textmode”。
system|user,binmode|textmode,exec,cygexec,cygdrive,mixed,
notexec,managed,nosuid,devfs,proc,noumount
如果参数为“/cygdrive”,则仅返回卷装载设置和 cygdrive 装载前缀。
用户装载覆盖系统装载。
$ perl -e 'print Cygwin::mount_flags "/usr/bin"'
system,binmode,cygexec
$ perl -e 'print Cygwin::mount_flags "/cygdrive"'
binmode,cygdrive,/cygdrive
Cygwin::is_binmount
如果给定的 cygwin 路径是二进制装载的,则返回 true;如果路径以文本模式装载,则返回 false。
Cygwin::sync_winenv
Cygwin 不会初始化所有原始 Win32 环境变量。请参阅此页面底部 https://cygwin.com/cygwin-ug-net/setup-env.html 中的“受限 Win32 环境”。
从 cygwin 程序调用的某些 Win32 程序可能需要一些环境变量,例如 ADODB 需要 %COMMONPROGRAMFILES%。调用 Cygwin::sync_winenv() 将所有 Win32 环境变量复制到您的进程,请注意 cygwin 会在遇到非 POSIX 路径时发出警告。
这将安装 Perl,包括 man 页面。
make install 2>&1 | tee log.make-install
注意:如果 STDERR
被重定向,make install
不会提示您将 perl 安装到 /usr/bin 中。
您可能需要成为 管理员才能运行 make install
。如果不是,您必须具有对相关目录的写访问权限。
有关以 HTML 格式安装 Perl 文档的信息,请参阅 INSTALL 文档。
这些是 Perl 版本中包含对 Cygwin 的引用的文件。这些非常简短的注释试图解释所有条件代码的原因。希望保持最新状态将允许 Cygwin 端口尽可能保持简洁。
INSTALL README.cygwin README.win32 MANIFEST
pod/perl.pod pod/perlport.pod pod/perlfaq3.pod
pod/perldelta.pod pod/perl5004delta.pod pod/perl56delta.pod
pod/perl561delta.pod pod/perl570delta.pod pod/perl572delta.pod
pod/perl573delta.pod pod/perl58delta.pod pod/perl581delta.pod
pod/perl590delta.pod pod/perlhist.pod pod/perlmodlib.pod
pod/perltoc.pod Porting/Glossary pod/perlgit.pod
Porting/updateAUTHORS.pl
dist/Cwd/Changes ext/Compress-Raw-Zlib/Changes
dist/Time-HiRes/Changes
ext/Compress-Raw-Zlib/README ext/Compress-Zlib/Changes
ext/DB_File/Changes ext/Encode/Changes ext/Sys-Syslog/Changes
ext/Win32API-File/Changes
lib/ExtUtils/CBuilder/Changes lib/ExtUtils/Changes
lib/ExtUtils/NOTES lib/ExtUtils/PATCHING lib/ExtUtils/README
lib/Net/Ping/Changes lib/Test/Harness/Changes
lib/Term/ANSIColor/ChangeLog lib/Term/ANSIColor/README
cygwin/Makefile.SHs
ext/IPC/SysV/hints/cygwin.pl
ext/NDBM_File/hints/cygwin.pl
ext/ODBM_File/hints/cygwin.pl
hints/cygwin.sh
Configure - help finding hints from uname,
shared libperl required for dynamic loading
Makefile.SH Cross/Makefile-cross-SH
- linklibperl
Porting/patchls - cygwin in port list
installman - man pages with :: translated to .
installperl - install dll, install to 'pods'
makedepend.SH - uwinfix
regen_lib.pl - file permissions
plan9/mkfile
vms/descrip_mms.template
win32/Makefile
t/io/fs.t - no file mode checks if not ntsec
skip rename() check when not
check_case:relaxed
t/io/tell.t - binmode
t/lib/cygwin.t - builtin cygwin function tests
t/op/groups.t - basegroup has ID = 0
t/op/magic.t - $^X/symlink WORKAROUND, s/.exe//
t/op/stat.t - no /dev, skip Win32 ftCreationTime quirk
(cache manager sometimes preserves ctime of
file previously created and deleted), no -u
(setuid)
t/op/taint.t - can't use empty path under Cygwin Perl
t/op/time.t - no tzset()
EXTERN.h - __declspec(dllimport)
XSUB.h - __declspec(dllexport)
cygwin/cygwin.c - os_extras (getcwd, spawn, and several
Cygwin:: functions)
perl.c - os_extras, -i.bak
perl.h - binmode
doio.c - win9x can not rename a file when it is open
pp_sys.c - do not define h_errno, init
_pwent_struct.pw_comment
util.c - use setenv
util.h - PERL_FILE_IS_ABSOLUTE macro
pp.c - Comment about Posix vs IEEE math under
Cygwin
perlio.c - CR/LF mode
perliol.c - Comment about EXTCONST under Cygwin
ext/Compress-Raw-Zlib/Makefile.PL
- Can't install via CPAN shell under Cygwin
ext/Compress-Raw-Zlib/zlib-src/zutil.h
- Cygwin is Unix-like and has vsnprintf
ext/Errno/Errno_pm.PL - Special handling for Win32 Perl under
Cygwin
ext/POSIX/POSIX.xs - tzname defined externally
ext/SDBM_File/sdbm/pair.c
- EXTCONST needs to be redefined from
EXTERN.h
ext/SDBM_File/sdbm/sdbm.c
- binary open
ext/Sys/Syslog/Syslog.xs
- Cygwin has syslog.h
ext/Sys/Syslog/win32/compile.pl
- Convert paths to Windows paths
ext/Time-HiRes/HiRes.xs
- Various timers not available
ext/Time-HiRes/Makefile.PL
- Find w32api/windows.h
ext/Win32/Makefile.PL - Use various libraries under Cygwin
ext/Win32/Win32.xs - Child dir and child env under Cygwin
ext/Win32API-File/File.xs
- _open_osfhandle not implemented under
Cygwin
ext/Win32CORE/Win32CORE.c
- __declspec(dllexport)
ext/B/t/OptreeCheck.pm - Comment about stderr/stdout order under
Cygwin
ext/Digest-SHA/bin/shasum
- Use binary mode under Cygwin
ext/Sys/Syslog/win32/Win32.pm
- Convert paths to Windows paths
ext/Time-HiRes/HiRes.pm
- Comment about various timers not available
ext/Win32API-File/File.pm
- _open_osfhandle not implemented under
Cygwin
ext/Win32CORE/Win32CORE.pm
- History of Win32CORE under Cygwin
lib/Cwd.pm - hook to internal Cwd::cwd
lib/ExtUtils/CBuilder/Platform/cygwin.pm
- use gcc for ld, and link to libperl.dll.a
lib/ExtUtils/CBuilder.pm
- Cygwin is Unix-like
lib/ExtUtils/Install.pm - Install and rename issues under Cygwin
lib/ExtUtils/MM.pm - OS classifications
lib/ExtUtils/MM_Any.pm - Example for Cygwin
lib/ExtUtils/MakeMaker.pm
- require MM_Cygwin.pm
lib/ExtUtils/MM_Cygwin.pm
- canonpath, cflags, manifypods, perl_archive
lib/File/Fetch.pm - Comment about quotes using a Cygwin example
lib/File/Find.pm - on remote drives stat() always sets
st_nlink to 1
lib/File/Spec/Cygwin.pm - case_tolerant
lib/File/Spec/Unix.pm - preserve //unc
lib/File/Spec/Win32.pm - References a message on cygwin.com
lib/File/Spec.pm - Pulls in lib/File/Spec/Cygwin.pm
lib/File/Temp.pm - no directory sticky bit
lib/Module/CoreList.pm - List of all module files and versions
lib/Net/Domain.pm - No domainname command under Cygwin
lib/Net/Netrc.pm - Bypass using stat() under Cygwin
lib/Net/Ping.pm - ECONREFUSED is EAGAIN under Cygwin
lib/Pod/Find.pm - Set 'pods' dir
lib/Pod/Perldoc/ToMan.pm - '-c' switch for pod2man
lib/Pod/Perldoc.pm - Use 'less' pager, and use .exe extension
lib/Term/ANSIColor.pm - Cygwin terminal info
lib/perl5db.pl - use stdin not /dev/tty
utils/perlbug.PL - Add CYGWIN environment variable to report
dist/Cwd/t/cwd.t
ext/Compress-Zlib/t/14gzopen.t
ext/DB_File/t/db-btree.t
ext/DB_File/t/db-hash.t
ext/DB_File/t/db-recno.t
ext/DynaLoader/t/DynaLoader.t
ext/File-Glob/t/basic.t
ext/GDBM_File/t/gdbm.t
ext/POSIX/t/sysconf.t
ext/POSIX/t/time.t
ext/SDBM_File/t/sdbm.t
ext/Sys/Syslog/t/syslog.t
ext/Time-HiRes/t/HiRes.t
ext/Win32/t/Unicode.t
ext/Win32API-File/t/file.t
ext/Win32CORE/t/win32core.t
lib/AnyDBM_File.t
lib/Archive/Extract/t/01_Archive-Extract.t
lib/Archive/Tar/t/02_methods.t
lib/ExtUtils/t/Embed.t
lib/ExtUtils/t/eu_command.t
lib/ExtUtils/t/MM_Cygwin.t
lib/ExtUtils/t/MM_Unix.t
lib/File/Compare.t
lib/File/Copy.t
lib/File/Find/t/find.t
lib/File/Path.t
lib/File/Spec/t/crossplatform.t
lib/File/Spec/t/Spec.t
lib/Net/hostent.t
lib/Net/Ping/t/110_icmp_inst.t
lib/Net/Ping/t/500_ping_icmp.t
lib/Net/t/netrc.t
lib/Pod/Simple/t/perlcyg.pod
lib/Pod/Simple/t/perlcygo.txt
lib/Pod/Simple/t/perlfaq.pod
lib/Pod/Simple/t/perlfaqo.txt
lib/User/grent.t
lib/User/pwent.t
交换真实用户和有效用户和组 ID 的支持不完整。在 WinNT Cygwin 上提供 setuid()
、seteuid()
、setgid()
和 setegid()
。但是,需要额外的 Cygwin 调用来操作 WinNT 访问令牌和安全上下文。
Charles Wilson <[email protected]>、Eric Fifer <[email protected]>、alexander smishlajev <[email protected]>、Steven Morlock <[email protected]>、Sebastien Barre <[email protected]>、Teun Burgers <[email protected]>、Gerrit P. Haase <[email protected]>、Reini Urban <[email protected]>、Jan Dubois <[email protected]>、Jerry D. Hedden <[email protected]>。
上次更新:2019-11-14