Tag: posix

EAGAIN是什么意思?

在标题中,EAGAIN是什么意思?

如何检测当前进程是否由GDB运行?

标准的方法如下: if (ptrace(PTRACE_TRACEME, 0, NULL, 0) == -1) printf("traced!\n"); 在这种情况下,如果当前进程被跟踪(即使用gdb运行或附加到它),ptrace会返回一个错误。 但是这样做存在一个严重的问题:如果调用成功返回,那么gdb可能以后不会附加到它。 这是一个问题,因为我没有试图实施反debugging的东西。 我的目的是当一个接触(即一个断言失败)和gdb正在运行(否则我得到一个SIGTRAP,停止应用程序)发射一个'诠释3'。 禁用SIGTRAP并每次发射“int 3”并不是一个好的解决scheme,因为我testing的应用程序可能使用SIGTRAP来达到其他目的(在这种情况下,我还是搞砸了,所以没关系,事物的原则:)) 谢谢

C标准库和C POSIX库的区别

我被“C标准lib”和“C POSIX lib”弄糊涂了,因为我发现“C POSIX lib”中定义的许多头文件也是“C标准库”的一部分。 所以,我假设“C标准库”是由ANSI C组织定义的一个库,在不同平台(Win32 / Unix-like)上有不同的实现,而“C POSIX库”只是“C标准lib“在类似Unix的操作系统上,对吗? 但是“C POSIX lib”包含了一些未在“C标准库”中指定的头文件,如<sys/types.h> , <sys/wait.h>和<pthread.h> 。 以<pthread.h>为例,我假定它的“C标准库”对应是<threads.h> ,那么如果我想在Linux上编写一个multithreading程序,我应该包含哪个头文件<pthread.h>或<threads.h> ?

primefaces文件重命名(与覆盖)可能在Windows上?

在POSIX系统上,重命名(2)提供了一个primefaces重命名操作,包括覆盖目标文件,如果它存在并且权限允许的话。 有什么办法可以在Windows上获得相同的语义? 我知道Vista和Server 2008上的MoveFileTransacted(),但我需要这个来支持Win2k。 这里的关键词是primefaces的 …解决scheme不能以任何方式使操作失败,使操作处于不一致的状态。 我见过很多人说win32上不可能,但我问你,是不是? 请尽可能提供可靠的引文。

消息队列在linux中是否过时?

我最近在Linux上一直在玩消息队列(System V,但是POSIX应该也可以),而且对于我的应用程序来说它们看起来非常完美,但是在阅读了Unix编程的艺术之后,我不确定它们是否真的是一个好select。 http://www.faqs.org/docs/artu/ch07s02.html#id2922148 System V IPC的高层消息传递层已经基本没有使用。 由共享内存和信号量组成的较低层在需要在同一机器上运行的进程之间进行互斥locking和一些全局数据共享的情况下仍然具有重要的应用。 这些System V共享内存设备演变成POSIX共享内存API,在Linux,BSD,MacOS X和Windows下支持,但不是经典的MacOS。 http://www.faqs.org/docs/artu/ch07s03.html#id2923376 System V IPC设施存在于Linux和其他现代Unix中。 但是,由于它们是遗留function,所以不经常使用。 到2003年中,Linux版本仍然存在漏洞。 似乎没有人愿意解决这些问题。 在更新的Linux版本中,System V消息队列仍然是错误的? 我不确定作者是否意味着POSIX消息队列应该正常? 似乎socket是几乎所有东西(?)的首选IPC,但我不明白用socket或其他方法实现消息队列将会如何简单。 还是我想太复杂? 我不知道是否与embedded式Linux相关?

为什么只读打开一个命名pipe道块?

在使用Python处理各种UNIX(Linux,FreeBSD和MacOS X)命名pipe道(FIFOs)时,我注意到了一些奇怪的地方。 第一个,也许是最烦人的是试图打开一个空/空闲的FIFO只读将阻塞(除非我使用os.O_NONBLOCK与os.open()调用较低级别)。 但是,如果我打开它的读/写,那么我没有阻止。 例子: f = open('./myfifo', 'r') # Blocks unless data is already in the pipe f = os.open('./myfifo', os.O_RDONLY) # ditto # Contrast to: f = open('./myfifo', 'w+') # does NOT block f = os.open('./myfifo', os.O_RDWR) # ditto f = os.open('./myfifo', os.O_RDONLY|os.O_NONBLOCK) # ditto 我只是好奇,为什么。 为什么打开的调用块,而不是一些后续的读取操作? 另外我注意到一个非阻塞文件描述符可以在Python中performance出不同的行为。 在os.open()和os.O_NONBLOCK用于初始打开操作的情况下,如果文件描述符中的数据没有准备好, os.read()似乎会返回一个空string。 但是,如果我使用fcntl.fcnt(f.fileno(), fcntl.F_SETFL, fcntl.GETFL […]

如何在C中使用nanosleep()? 什么是`tim.tv_sec`和`tim.tv_nsec`?

以下是tim.tv_sec和tim.tv_nsec ? 我怎样才能睡眠执行500000微秒? #include <stdio.h> #include <time.h> int main() { struct timespec tim, tim2; tim.tv_sec = 1; tim.tv_nsec = 500; if(nanosleep(&tim , &tim2) < 0 ) { printf("Nano sleep system call failed \n"); return -1; } printf("Nano sleep successfull \n"); return 0; }

snprintf()总是空终止?

snprintf总是空终止目标缓冲区? 换句话说,这是否足够: char dst[10]; snprintf(dst, sizeof (dst), "blah %s", somestr); 还是你必须这样做,如果somestr足够长? char dst[10]; somestr[sizeof (dst) – 1] = '\0'; snprintf(dst, sizeof (dst) – 1, "blah %s", somestr); 我对这个标准所说的和一些stream行的libc可能做的事情都不感兴趣,这不是标准的行为。

在linux / unix下有没有相当于WinAPI的MAX_PATH?

如果我想分配一个字符数组(C),保证足够大,以保存任何有效的绝对path+文件名,它需要多大。 在Win32上,有MAX_PATH定义。 什么是Unix / Linux的等价物?

在makefile中抑制命令调用的回显?

我写了一个应用程序打算输出到标准输出。 赋值规范要求创build一个Makefile,当它被调用时, make run > outputFile应该运行该程序并将输出写入一个文件,该文件的SHA1指纹与规范中给出的相同。 我的问题是,我的makefile: … run: java myprogram 还打印运行我的程序(例如java myprogram)到输出文件的命令,以便我的文件包含这多余的行导致指纹错误。 有没有办法执行一个命令没有命令行回应到命令行?