Tag: 权限

通过CreateProcess启动时,cl.exe似乎没有写入权限

我正在调用CreateProcess来启动cl.exe(Win7 64位上的VS2010)。 我收到以下错误.. cl:命令行错误D8037:无法创建临时il文件; 清除旧的il文件的临时目录 在cmd窗口中使用相同的环境变量调用相同的命令行会成功。 我检查了临时目录,没有旧文件。 似乎创建的进程没有写入权限。 我一直在尝试不同的方法.. CreateProcessAsUser,设置安全属性以授予Everyone用户组的所有标准权限,包括和不包含inheritance句柄等。它们似乎都没有解决它。 这是基本代码…… SECURITY_ATTRIBUTES sa; sa.nLength = sizeof( SECURITY_ATTRIBUTES ); sa.bInheritHandle = TRUE; sa.lpSecurityDescriptor = NULL; const char* _szSourceFile = “c:\\temp\\test\\src\\foo.cpp”; char szOptions[ 2048 ]; sprintf_s( szOptions, “c:\\temp\\compile\\cl.exe ” “/Gd ” “/Fo\”c:\\temp\\test\\out\\\” ” “/Fe\”c:\\temp\\test\\out\\\” ” “/Fd\”c:\\temp\\test\\out\\\” ” “/D \”WIN32\” ” “/D \”_DEBUG\” ” “/D \”_WINDOWS\” ” “/D […]

为什么在perl脚本更改的C包装器的setgid-bit时@INC会发生变化?

这完全在RHEL6上 我试图将perl脚本作为特定用户(perl脚本的所有者)运行,方法是将其包装在C二进制文件中,然后设置二进制文件的setgid位(参考: https : //superuser.com/questions/440363/ can-i-make-a-script-always-execute-as-root )。 perl脚本使用各种perl模块。 如果perl模块在试图运行C二进制文件的帐户的PERL5LIB中,并且未在C二进制文件上设置setgid-bit,则运行正常。 如果设置了setgid-bit,那么它会失败,因为使用的perl模块不在@INC中。 一些代码用于演示@INC如何随粘性位改变… the.pl #!/usr/bin/env perl print “Size of INC: “.scalar(@INC).”\n”; exit; wrapper.c #include #include #include int main(int argc, char *argv[]) { exit(execvp(“/home/me/the.pl”,(char **)argv)); } perl脚本权限是-rwxrwxr-x 当我将包装器的权限设置为-rwxr-xr-x时(注意未设置setgid位),然后从其他帐户运行二进制文件,我得到… Size of INC = 87 …这是我所期望的(PERL5LIB中有87个元素)。 但是当我将包装器的权限设置为-rwxr-sr-x时(注意setgid位已设置),然后从其他帐户运行二进制文件,我得到… Size of INC = 4 即使我在perl脚本的所有者和运行包装器的帐户的.cshrc中加载​​所有87个元素的PERL5LIB,我也会得到相同的结果。 我需要运行二进制文件作为perl脚本的所有者,因为该帐户具有用户帐户所没有的priv。 root用户不是任何一个玩家。 为什么我会丢失那些PERL5LIB元素? 有没有办法解决这个问题? 提前致谢!

c读取文件的权限

如何检查文件在C中是否具有读取权限?

如何更改linux套接字文件的权限?

我有一个程序,它创建一个套接字,然后我想更改套接字文件的权限: ret_val = chmod(filename, 0777); ,但它不会改变,即使ret_val为0.如果我在常规文件上尝试相同的操作,它也可以。 有任何想法吗? PS:我以root身份运行程序,因此它拥有所需的所有权限。

如何以编程方式设置我的char设备的权限

我最近在工作中inheritance了一些代码,这是旧的2.4.X linux内核驱动程序,我的任务是让他们在更新的内核2.6或更高版本上工作。 我正在运行带有3.1.10内核的OpenSUSE 12.1。 我已经从register_chrdev()更新了原始代码以使用class_create()/ device_create()调用,我可以看到我的设备正确显示在/ dev中。 我目前的问题是我的设备的权限仅为用户设置为r / w: crw——- 1 root root 244, 0 Aug 7 07:57 gcanain 我知道我可以通过命令行“chmod”该文件,或者我可以设置udev权限……但无论如何都要以编程方式执行此操作,这样当我发出insmod命令时,dev将以正确的方式安装规则到位了吗? 是否有任何可能存在的API我可以调用来执行此操作,我在其中一个创建API中缺少任何选项? 只是为了澄清,我不想使用udev规则的部分原因是我不知道设备驱动程序的名称。 设备驱动程序在循环中生成,因此名称附加一个数字,nNumDevs几乎可以是任何东西: for (i = 0; i < nNumDevs; i++) { strcpy(Modname,GC_ANAIN_MODULE_NAME); strcat(Modname,"%d"); device_create(c1, NULL, MKDEV(nMajor, GC_ANAIN_MINOR_VERSION+i), NULL, Modname, i); }

检查另一个进程中的环境变量?

在Windows中,有没有办法检查另一个进程是否存在环境变量? 只需要检查存在,不一定得到价值。 我需要从代码中做到这一点。