Articles of posix

getnameinfo指定socklen_t

getnameinfo原型的第二个参数要求socklen_ttypes,但sizeof使用size_t。 那么我怎样才能得到socklen_t? 原型: int getnameinfo(const struct sockaddr *restrict sa, socklen_t salen, char *restrict node, socklen_t nodelen, char *restrict service, socklen_t servicelen, int flags); 例: struct sockaddr_in SIN; memset(&SIN, 0, sizeof(SIN)); // This should also be socklen_t ? SIN.sin_family = AF_INET; SIN.sin_addr.s_addr = inet_addr(IP); SIN.sin_port = 0; getnameinfo((struct sockaddr *)&SIN, sizeof(SIN) /* socklen_t */, BUFFER, NI_MAXHOST, […]

调用posix_spawn时closures所有文件句柄

我想使用posix_spawn(…)(或者非常相似的东西)产生一系列进程。 这个函数接受一个posix_spawn_file_actions_ttypes的参数,它允许我指定如何处理打开的文件句柄。 从文档中我可以确定,所有文件都从调用进程inheritance,并根据posix_spawn_file_actions_t结构中的信息进行修改。 我希望所有文件都未被生成的进程打开(stdin,stdout和stderr除外)。 有谁知道如何做到这一点? 显然这可以在一些实现中使用'POSIX_SPAWN_CLOEXEC_DEFAULT'spawn属性标志来完成,但是这在我的平台上是不可用的。 我也可以使用fcntl(…)在打开文件的时候指定'close on exec',但是我觉得这个问题的一个更加本地化的解决scheme是可取的。

在Java中获得硬链接计数

我需要从java中的solaris10操作系统中的文件中获取硬链接计数。 parsingls -l不是一个选项。 我尝试使用java的http://bmsi.com/java/posix/index.html的 posix,但无法设法得到它的工作。 有没有其他轻量级的API或代码来获取此信息?

SIGKILL信号处理

如果一个linux进程正在等待I / O(即处于SLEEP状态)并发出一个SIGKILL信号,那么在终止( STOPPED状态)时,它将通过RUNNING还是READY状态? 换句话说,对于一个处理系统中断的进程,如SIGKILL生成的进程,是否需要通过RUNNING或READY状态? 在正常情况下,一个进程可以处理来自内核的中断,并且知道SIGKILL有一个相当矛盾的目的,就是杀死一个没有响应的信号,但是我怀疑有多less进程被控制,如果有的话。

这两个函数有什么区别:`ioremap_uc()`和`set_memory_uc`?

当我想将内存区域标记为Write Combined(禁用可caching和使用BIU)或者通过设置PAT(页面属性表 – PIT中的7bit)不可caching时,那么我必须使用什么,以及这两个函数之间有什么区别? 驱动程序应该使用ioremap_[uc|wc]访问具有[uc | wc]访问types的PCI BAR: void __iomem * ioremap_wc(resource_size_t phys_addr,unsigned long size) 驱动程序应该使用set_memory_[uc|wc]设置RAM范围的访问types: int set_memory_uc(unsigned long addr,int numpages) 取自: http : //lwn.net/Articles/278994/ 为什么我不能使用PCI BAR和RAM范围的单一function? 说明: ioremap_uc()获取物理地址和返回虚拟地址设置不可caching,与set_memory_uc()获得虚拟地址,并设置这些页面的Uncacheable? 这些代码是否相同? void* virt_ptr = ioremap_uc(phys_ptr, size); 和 void* virt_ptr = ioremap(phys_ptr, size); const int page_size = 4096; set_memory_uc(virt_ptr, size/page_size);

在传递NULL的情况下转储核心

strdup(null)转储核心。 尝试在Ubuntu和FreeBSD的两个。 为什么? 它不应该返回null吗? char *b = NULL; a = strdup(b); 这将会在strdup调用中转储核心。

POSIX:FreeBSD vs Linux中的pipe道系统调用

在Linux(2.6.35-22-generic)中, man pipe指出 pipe()创build一个pipe道,一个可用于进程间通信的单向数据通道。“ 在FreeBSD(6.3-RELEASE-p5)中, man pipe指出 pipe()系统调用创build一个pipe道,这是一个允许双向数据stream的对象,并分配一对文件描述符。 一个是单向的,另一个是双向的。 我希望这不是一个愚蠢的问题,但哪种方法是这样做的标准方式? 他们都符合POSIX? 为了使我的意图清楚,我相信pipe()是一种方法,并且正在寻找一些弹药以获得任何点数,因此在考试中丢失了一些分数; p

在mq_send中发送结构体

我使用的是POSIX IPC,根据文档 – http://man7.org/linux/man-pages/man3/mq_send.3.html mq_send()方法只发送char *数据,而mq_recv()只接收字符数据。 但是,我想发送一个自定义结构到我的消息队列,并在接收端,我想要的结构。 示例结构: struc Req { pid_t pid; char data[4096]; } 那么,有没有人知道如何在C lang中做到这一点?

如何在Python的Linux设备文件上执行低级I / O?

我有一个设备返回一个string来响应写入设备文件的命令。 我能够写入命令到设备,并读取C中的返回string,代码如下所示: int dev = open("/dev/USBDev251",O_RDWR); write(dev,data,sizeof(data)); read(dev,buff,16); 试图在python中做同样的事情: dev = os.open("/dev/USBDev251",os.O_RDWR) os.write(dev, data) os.read(dev,16) 写入成功,但只返回一个空string。 我在这里错过了什么?

执行命令行并返回命令输出

目前,我正在使用非标准SYSTEM内部例程(类似于Fortran 2008 EXECUTE_COMMAND_LINE内部函数)从我的fortran程序中使用shell命令行调用: CALL SYSTEM(commandStr) 其中commandStr是包含我要执行的shell命令的string。 此刻,我不知道直接的方式来返回commandStr的输出,但只有它的返回状态。 所以,我现在正在做的是将输出写入文件,然后从Fortran程序中读取文件。 例: CALL SYSTEM('sed ''s/,//g'' myFile > dummyFile') 如果我想从myFile中删除逗号。 然后我使用OPEN和READ来获取dummyFile的内容。 这工作得很好,但是我很关心从磁盘写入/读取文件,特别是如果我在一个长的循环内执行此操作,并且commandStr输出很大。 有没有办法将commandStr输出redirect到我可以直接从Fortran程序访问的内存缓冲区(而不是硬盘)(也许是通过一个特定的UNIT号码)?