标签: posix

POSIX套接字和BSD套接字有什么区别?

有人可以解释POSIX套接字和BSD套接字之间的区别吗?

c c++ sockets posix

15
推荐指数
2
解决办法
9717
查看次数

有关崩溃安全和容错编程的资源

我喜欢LWN文章"Crash-only software",我想了解更多关于崩溃安全和容错编程的知识.

令人惊讶的是,很难确保持久状态在故障情况下是一致的.在这里,我甚至不讨论分布式操作:在单个节点上也很难:如果系统崩溃,即使是正常的Berkeley DB(BDB数据存储或BDB并发数据存储)也可能有一个被破坏的数据库.不仅高级应用程序约束被破坏,如果系统崩溃,数据库可能无法正确打开.

什么是关于崩溃安全和容错设计,方法和编程的良好资源.

如果资源专注于C++和POSIX环境,我将不胜感激.

c++ crash posix fault-tolerance

15
推荐指数
2
解决办法
1962
查看次数

如何检索C/Linux上的处理器数量?

我正在编写一个小型C应用程序,它使用一些线程来处理数据.我希望能够知道某台机器上的处理器数量,而不使用system()和小脚本.

我能想到的唯一方法是解析/ proc/cpuinfo.任何其他有用的建议?

c parallel-processing posix

15
推荐指数
2
解决办法
2万
查看次数

为什么使用select()而不是sleep()?

我正在编写一个关于iPhone音频的章节,并且遇到了一段我无法理解的代码:

while (aqc.playPtr < aqc.sampleLen) 
{
    select(NULL, NULL, NULL, NULL, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

(完整代码示例在第163-166页).根据我对代码的理解,音频正在另一个线程上处理,而while循环就是为了防止主线程在音频仍在处理时终止.

我不明白的是为什么select()要用来代替sleep().

从我所读到select()的用于监视I/O的变化并传递它的NULL并没有做任何有意义的事情.我已经运行了代码sleep(),它按预期工作.(我对低级别POSIX的了解几乎不存在.)

c multithreading posix

15
推荐指数
3
解决办法
2万
查看次数

我如何删除信号处理程序

我做了跟随信号处理程序

struct sigaction pipeIn;
pipeIn.sa_handler = updateServer;
sigemptyset(&pipeIn.sa_mask);
sa.sa_flags = SA_RESTART;

if(sigaction(SIGUSR1, &pipeIn, NULL) == -1){

    printf("We have a problem, sigaction is not working.\n");
    perror("\n");
    exit(1);    

}
Run Code Online (Sandbox Code Playgroud)

如何删除或阻止此特定处理程序,以便我可以设置另一个使用相同信号的信号处理程序?谢谢.

c posix signal-handling

15
推荐指数
1
解决办法
8452
查看次数

使用Auto和Lambda处理Signal?

我编写了这个程序,它有一个main函数,在其中,我创建了两个套接字,如下所示:

int sockfd1 = socket(AF_INET, SOCK_STREAM, 0);
int sockfd2 = socket(AF_INET, SOCK_STREAM, 0);
Run Code Online (Sandbox Code Playgroud)

现在我用它们做一些事情,当用户按下Ctrl + C终止进程时,我想确保套接字正确关闭,所以我这样做:

auto sigTermHandler = [&] (int param) { close(sockfd1); close(sockfd2); };
signal(SIGTERM, sigTermHandler);
Run Code Online (Sandbox Code Playgroud)

但是这会在编译时抛出以下编译错误g++ -std=gnu++0x <filename>.cpp:

error: cannot convert ‘main(int, char**)::<lambda(int)>’ to ‘__sighandler_t {aka void (*)(int)}’ for argument ‘2’ to ‘void (* signal(int, __sighandler_t))(int)’
Run Code Online (Sandbox Code Playgroud)

是不是可以用这种方式处理信号?请指教.

PS我知道我可以把它放在析构函数中,如果我做了适当的OOP,但我很想知道这是否有效.

c++ lambda posix signals c++11

15
推荐指数
2
解决办法
5915
查看次数

S_IRUSR中"我"的含义是什么?

S_IRUSR是posix的sys/stat.h中的宏常量.它代表用户读权限位.

前缀S_可代表"RUSR的状态"可能是"读取用户".但是'我'的含义是什么?

posix

15
推荐指数
1
解决办法
9074
查看次数

为什么必须在主线程上执行UIKit操作?

我试图理解为什么不能使用多个线程执行UI操作.这也是OpenGL或cocos2d等其他框架的要求吗?

其他语言如C#和javascript怎么样?我试过在谷歌看,但人们提到了一些我不明白的POSIX线程.

iphone multithreading posix uikit ios

15
推荐指数
1
解决办法
5853
查看次数

检查close()错误的原因是什么?

注意:请在将此标记为重复之前阅读结尾.虽然它很相似,但我在答案中寻找的范围超出了之前的问题所要求的范围.

我倾向于认同的广泛实践往往close纯粹作为文件描述符的资源释放函数而不是具有有意义的失败案例的潜在IO操作.事实上,在解决问题529之前,POSIX在错误之后离开了文件描述符的状态(即它是否仍然被分配)未指定,使得无法以任何有意义的方式对错误进行可移植的响应.

然而,很多GNU软件都花了很大的力气来检查错误close,并且Linux手册页面的close调用失败了"这是一个常见的但仍然很严重的编程错误".NFS和配额被引用作为close可能产生错误但不提供细节的情况.

close在现实世界的系统中,哪些情况可能会失败?它们今天是否相关?我特别感兴趣的是知道是否有任何现代系统close因任何非NFS,非设备节点特定的原因而失败,以及对于NFS或与设备相关的故障,在什么条件下(例如配置)它们可能是看到.

c linux posix

15
推荐指数
2
解决办法
1962
查看次数

检查errno!= EINTR:这是什么意思?

我发现这段代码多次使用(也是类似的代码,open()而不是使用它write()).

int c = write(fd, &v, sizeof(v));
if (c == -1 && errno != EINTR) {
    perror("Write to output file");
    exit(EXIT_FAILURE);
}
Run Code Online (Sandbox Code Playgroud)

为什么要检查&& errno != EINTR这里?

寻找errno男人,我发现关于下面的文字EINTR,但即使我参观man 7 signal不赐教.

EINTR中断函数调用(POSIX.1); 见信号(7).

c linux posix signals linux-kernel

15
推荐指数
2
解决办法
2万
查看次数