snprintf是否始终为null终止目标缓冲区?
换句话说,这是否足够:
char dst[10];
snprintf(dst, sizeof (dst), "blah %s", somestr);
Run Code Online (Sandbox Code Playgroud)
或者你必须这样做,如果somestr足够长?
char dst[10];
somestr[sizeof (dst) - 1] = '\0';
snprintf(dst, sizeof (dst) - 1, "blah %s", somestr);
Run Code Online (Sandbox Code Playgroud)
我对标准所说的以及一些流行的libc可能做的不是标准行为感兴趣.
鉴于主程序的标准定义:
int main(int argc, char *argv[]) {
...
}
Run Code Online (Sandbox Code Playgroud)
argcPOSIX系统在哪些情况下可以为零?
总是这样long int(据我所知,这是一个同义词long)是4字节吗?
我可以依靠吗?如果没有,对于基于POSIX的操作系统是否属实?
是否有可靠的方法来杀死给定用户的所有进程?kill(-1, SIGKILL)因为该用户将工作,除非该用户的流氓进程首先杀死查杀过程.到目前为止,我能找到的最好的方法是system("ps -u")为该用户循环并以这种方式终止进程,但这看起来真的很麻烦且效率低下.
编辑:为了澄清,我特别要求一个POSIX兼容的解决方案.出于某种原因,我认为标记posix的问题会把它放在标题中.
我最近在Linux中一直在使用消息队列(系统V,但POSIX也应该没问题),它们看起来非常适合我的应用程序,但在阅读了Unix编程的艺术之后,我不确定它们是否真的是一个不错的选择.
http://www.faqs.org/docs/artu/ch07s02.html#id2922148
System V IPC的上层消息传递层已基本停止使用.较低层由共享内存和信号量组成,在需要进行互斥锁定和在同一台机器上运行的进程之间进行一些全局数据共享的情况下,仍然具有重要的应用程序.这些System V共享内存工具演变为POSIX共享内存API,支持Linux,BSD,MacOS X和Windows,但不支持经典MacOS.
http://www.faqs.org/docs/artu/ch07s03.html#id2923376
System V IPC工具存在于Linux和其他现代Unix中.但是,由于它们是遗留功能,因此不会经常使用它们.到2003年中期,Linux版本仍然存在漏洞.似乎没有人足够关心它们.
在最近的Linux版本中,System V消息队列是否仍然存在错误?我不确定作者是否意味着POSIX消息队列应该没问题?
似乎套接字几乎是任何东西(?)的首选IPC,但我看不出用套接字或其他东西实现消息队列是多么简单.或者我的想法太复杂了?
我不知道我是否正在使用嵌入式Linux?
在阅读具有该名称的Unix系统调用的mkdir(2)手册页后,看来该调用不会在路径中创建中间目录,只会在路径中创建最后一个目录.是否有任何方法(或其他功能)来创建路径中的所有目录,而无需手动解析我的目录字符串并单独创建每个目录?
我对"C标准库"和"C POSIX库"感到有些困惑,因为我发现"C POSIX lib"中定义的许多头文件也是"C标准库"的一部分.
因此,我认为,"C标准库"是由ANSI C组织定义的库,并且在不同平台(Win32/Unix-like)上有不同的实现,而"C POSIX lib"只是"C标准"的实现lib"在类Unix操作系统上,对吗?
但是"C POSIX LIB"包含了一些头在"C标准库"未指定,如<sys/types.h>,<sys/wait.h>和<pthread.h>.
以<pthread.h>为例,我相信它的"C标准库"对应的是<threads.h>,那么如果我想要写Linux上的多线程程序,这头文件,我应该包括,<pthread.h>还是<threads.h>?
在POSIX系统上,rename(2)提供原子重命名操作,包括覆盖目标文件(如果存在)以及权限是否允许.
有没有办法在Windows上获得相同的语义?我知道Vista和Server 2008上的MoveFileTransacted(),但我需要它来支持Win2k及更高版本.
这里的关键词是原子 ......解决方案不能以任何方式使操作失败,使操作处于不一致状态.
我见过很多人说在win32上这是不可能的,但我问你,是不是真的?
如果可能,请提供可靠的引用.
如果我想分配一个char数组(在C中),保证它足够大以容纳任何有效的绝对路径+文件名,它需要多大.
在Win32上,有MAX_PATH定义.Unix/linux的等价物是什么?