找出运行python进程的用户的最佳方法是什么?
我能做到这一点:
name = os.popen('whoami').read()
Run Code Online (Sandbox Code Playgroud)
但这必须开始一个全新的过程.
os.environ["USER"]
Run Code Online (Sandbox Code Playgroud)
有时工作,但有时不设置环境变量.
OpenGroup POSIX.1-2001定义了strerror_r,Linux标准基础核心规范3.1也是如此.但我找不到对错误消息可合理预期的最大大小的引用.我希望有一些定义可以放在我的代码中,但没有我能找到的.
代码必须是线程安全的.这就是使用strerror_r而不是strerror的原因.
有人知道我可以用的符号吗?我应该创建自己的?
int result = gethostname(p_buffy, size_buffy);
int errsv = errno;
if (result < 0)
{
char buf[256];
char const * str = strerror_r(errsv, buf, 256);
syslog(LOG_ERR,
"gethostname failed; errno=%d(%s), buf='%s'",
errsv,
str,
p_buffy);
return errsv;
}
Run Code Online (Sandbox Code Playgroud)
从文件:
公开集团基本规格第6期:
错误
如果出现以下情况,strerror_r()函数可能会失败:
- [ERANGE]通过strerrbuf和buflen提供的存储空间不足,无法包含生成的消息字符串.
从来源:
的glibc-2.7 /的glibc-2.7 /串/ strerror.c:41:
char *
strerror (errnum)
int errnum;
{
...
buf = malloc (1024);
Run Code Online (Sandbox Code Playgroud) 当我使用POSIX sem_init()函数编译程序时,我得到一个编译警告(因为我通常使用的错误-Werror),当我在Mac OS X 10.10.1(Yosemite)上使用GCC 4.9.1或版本的版本编译时,该函数已被弃用Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn)来自XCode 6.1.1的Clang().快速浏览一下/usr/include/sys/semaphore.h表示此功能确实有__deprecated它的声明之后的标签,因为这样做
sem_getvalue()和
sem_destroy().
问题:
鉴于POSIX规范中没有任何弃用的暗示,为什么在Mac OS X上将这三个函数单独列为已弃用?
鉴于它们已被弃用,替代品是什么,为什么替代品更受欢迎?
(我确实首先检查了Ask Different ;没有标记c的问题,也没有问题询问已弃用的系统调用 - 只有程序.)
基于各种参考文献,我在Linux中对信号的主观定义是"用于通知进程有关特定事件发生的触发器.此处的事件可能涉及软件异常.此外,信号也可用于IPC机制. " 我的问题是
在C中是否有(POSIX-)可移植方式用于原子变量操作,类似于使用pthread的可移植线程?
原子操作是像"递增和获取"这样的操作,它们以原子方式执行,这意味着没有上下文切换可以干扰操作.在Linux内核空间中,我们必须使用atomic_t类型,在Java中我们有java.util.concurrent.atomic包.
在Linux上,atomic.h文件提供原子操作,但include依赖于平台,例如#include <asm-x86_64/atomic.h>,它在Mac OS X上不能以类似的方式提供.
在POSIX的基本原理中有一个注意事项,强制CHAR_BIT为8是一个让步,以保持与C99的对齐而不抛弃套接字/网络,但我从来没有看到冲突究竟是什么的解释.有没有人有轶事或引用为什么它被认为是必要的?
编辑:我已经得到了很多关于为什么它CHAR_BIT成为8的原因的猜测答案,我同意,但我真正想要的是C99与POSIX中的网络技术之间的技术冲突是什么.我最好的猜测是它与C99有关,要求uint*_t是精确大小的类型(没有填充),而inttypes.h之前在POSIX中没有提出这样的要求.
在C项目(POSIX)中,如何获取当前系统的完全限定名称?
例如,我可以通过gethostname()unistd.h 获取我的机器的主机名
.这可能会给我machine3回报,但我实际上是在寻找machine3.somedomain.com例子.
我如何获取此信息?如果可能的话,我不想使用对system()的调用来执行此操作.
#include <stdio.h>
int main() {
printf("This goes to screen\n");
freopen("out.txt", "a", stdout);
printf("This goes to out.txt");
freopen("/dev/stdout", "a", stdout);
printf("This should go to screen too, but doesn't\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我调用freopen将stdout重定向到out.txt然后我在文件上打印一些东西,现在我想将它重定向回屏幕,但是freopen("/ dev/stdout","a",stdout); 不起作用.有没有办法使用ANSI C或POSIX系统调用?
我正在编写一个POSIX shell脚本,它可能会也可能不会以foo.sh < test.txt非交互方式从stdin接收输入.
如何检查stdin上是否有任何内容,以避免停止while read -r line...?
我已经包含了标题netdb.h,包含在哪里getaddrinfo,但是gcc发出了这个警告:
warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
gcc -m32 -static -s -O2 -std=c99 -D_POSIX_C_SOURCE=200112L myprogram.c
Run Code Online (Sandbox Code Playgroud)
如何静态编译丢失的文件?
可能的解决方案:
可能是glibc安装缺少静态编译所需的相应目标文件.如果是这种情况,请创建相应的目标文件并在编译时链接它.
尝试EGLIBC而不是glibc.
我成功地用dietlibc编译了我的程序,它编译时没有任何错误加上得到的二进制文件比glibc制作的要小得多.