主题说明了一切 - 通常简单和跨平台的方式是智能地轮询.但是每个操作系统都有一些无需轮询即可通知的方法.是否有可能以合理的跨平台方式?(我只关心Windows和Linux,但我使用mac,所以我认为posix可能有帮助?)
我正在编写一个程序来检查某些东西是文件还是目录.有没有比这更好的方法呢?
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>
int isFile(const char* name)
{
DIR* directory = opendir(name);
if(directory != NULL)
{
closedir(directory);
return 0;
}
if(errno == ENOTDIR)
{
return 1;
}
return -1;
}
int main(void)
{
const char* file = "./testFile";
const char* directory = "./";
printf("Is %s a file? %s.\n", file,
((isFile(file) == 1) ? "Yes" : "No"));
printf("Is %s a directory? %s.\n", directory,
((isFile(directory) == 0) ? "Yes" : "No"));
return 0;
}
Run Code Online (Sandbox Code Playgroud) 这个问题不是关于,虚假的唤醒是否真的很开心,因为这已经在这里全面讨论过:虚假的唤醒真的发生了吗?因此,这也不是为什么我必须围绕我的wait声明循环.这是关于:
我想构建一个虚假唤醒发生的案例.到目前为止我在上面提到的问题中学到的是:
如果发出一个Linux进程的信号,它的等待线程将各自享受一个不错的,热的虚假唤醒.
所以看来这只能用于linux机器,实际上我有Ubuntu 11.04 - 64位.我编写了一个Java程序,其中一个线程正在等待一个条件,但没有循环和另一个类,线程只是等待并被另一个线程通知.我认为在一个JVM中启动所有三个线程会强制执行上述情况,但似乎并非如此.
有没有其他人知道如何在Java中构建这样的案例?
据我所知,对于TCP套接字,ECONNRESET与RST数据包有关.但是我在read()和write()调用上也看到了AF_LOCAL套接字的ECONNRESET错误.这是什么意思?ECONNRESET与read()返回0或write()抛出EPIPE有什么不同?
假设传递给的侦听套接字上accept设置了非默认选项setsockopt.这些选项(部分或全部?)是由接收连接的结果文件描述符继承的吗?
只是好奇.哪些系统提供EAGAIN和EWOULDBLOCK #define它们作为不同的值?
使用System V和Posix信号量之间的权衡取舍是什么?
是否与Win32 API中的Linux/Unix stdio.h popen()函数大致相同?如果是这样,我在哪里可以找到它?
编辑:我需要知道这个来修补D标准库中的遗漏.任何答案必须只使用标准的Win32 API,没有特定于MSVC的功能.另外,如果存在的话,我更喜欢低级别的东西.
C++ 11引入了<system_error>包含通用系统的头文件来处理错误代码.An std::error_code是一个元组,包含一个int错误代码和一个对a的引用std::error_category,它定义了错误域和错误代码的处理.标准库带有四个类别:std::generic_category,std::system_category,std::future_category,和std::iostream_category.
有冲突,在其上使用的类别,都在这里SO和C++的参考点,创建时std::error_codeS /投掷std::system_error以s errno和WinAPI的错误代码:
errnowith std::generic_category:SO answer,llvm-commits,cplusplus.comerrnowith std::system_category:SO answer,cppreference.comGetLastError()用std::generic_category:SO回答GetLastError()with std::system_category:SO回答,SO评论但是,errno并且GetLastError()不能使用相同的类别,否则一些错误代码将是不明确的.错误代码33是一个例子,因为它是EDOM和ERROR_LOCK_VIOLATION.
甚至有些地方主张WinAPI的用户制作类别,但我目前找不到任何引用.这种替代方案会特别痛苦.
哪些类别应与使用errno,并应搭配使用GetLastError(),使
std::error_code::default_error_condition()std::error_code::message()是否简单且适用于底层错误代码?