Tag: linux的

如何处理execvp中的错误?

我写了一个小程序(带有来自SO的代码),方便了printenv | sort | less printenv | sort | less printenv | sort | less 。 现在我想实现error handling,我从execvp开始。 它只是检查返回值还有什么? AFAIK我只检查返回值,如果它在此函数中为0则return execvp (cmd [i].argv [0], (char * const *)cmd [i].argv); 。 那是对的吗? #include #include #include #include #include #include struct command { const char **argv; }; /* Helper function that spawns processes */ int spawn_proc (int in, […]

为什么在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元素? 有没有办法解决这个问题? 提前致谢!