草庐IT

POSIX信号量

全部标签

linux - 确定文件系统是否以只读方式挂载的最佳 POSIX 方法

如果我有一个POSIX系统,如Linux或MacOSX,确定路径是否在只读文件系统上的最佳和最便携的方法是什么?我可以想到4种方法:open(2)一个带有O_WRONLY的文件-您需要想出一个唯一的文件名并传入O_CREAT和O_EXCL。如果它失败并且您有EROFS的错误号,那么您就知道它是一个只读文件系统。这会产生烦人的副作用,因为实际上创建了一个您不关心的文件,但您可以在创建后立即取消链接(2)它。statvfs(3)-返回的structstatvfs的字段之一是f_flag,标志之一是ST_RDONLY用于只读文件系统。但是,statvfs(3)的规范清楚地表明应用程序不能依赖

c - 时区文件到 POSIX 时区字符串

我们有一个嵌入式Linux系统,用户可以从系统的tz文件列表中设置时区(国家/地名、GMT+-n、UTC)或者时区/$TZ可以直接在POSIX中设置。格式(EGCET-01:00:00CEST-02:00:00,M3.5.0/02:00:00,M10.5.0/03:00:00或EST5EDT)由远程服务器(不知道时区名称)。无论哪个实体最后设置了时区(无论是人类还是远程服务器),我们都需要以POSIX格式将本地时区设置报告回远程服务器,最好是尽量减少说谎/捏造。在我挽起袖子之前,戴上我的尖顶帽子,开始解析tzfile手动格式化我认为值得询问是否有预先存在的函数/库或这样做的示例?我已经

c - 时区文件到 POSIX 时区字符串

我们有一个嵌入式Linux系统,用户可以从系统的tz文件列表中设置时区(国家/地名、GMT+-n、UTC)或者时区/$TZ可以直接在POSIX中设置。格式(EGCET-01:00:00CEST-02:00:00,M3.5.0/02:00:00,M10.5.0/03:00:00或EST5EDT)由远程服务器(不知道时区名称)。无论哪个实体最后设置了时区(无论是人类还是远程服务器),我们都需要以POSIX格式将本地时区设置报告回远程服务器,最好是尽量减少说谎/捏造。在我挽起袖子之前,戴上我的尖顶帽子,开始解析tzfile手动格式化我认为值得询问是否有预先存在的函数/库或这样做的示例?我已经

c - 如果我捕捉到 SIGSEGV 并且信号处理程序导致另一个 SIGSEGV,会发生什么情况?

这个问题是针对Linux提出的。使用GCC编译器。如果SIGSEGV(我的意思是通常会导致SIGSEGV的违规行为)发生在旨在捕获SIGSEGV的信号处理程序中,可以预期会有什么行为?有助于讨论的代码示例:/*Inmainorwhatever*/{structsigactionsa={};/*initialisedtoallzero(IvoteforGCCstylebreachofstandardhere)*/sa.sa_handler=DisasterSignals;sa.sa_flags=SA_RESETHAND|SA_NODEFER;/*Tohaveorhavenot*/siga

c - 如果我捕捉到 SIGSEGV 并且信号处理程序导致另一个 SIGSEGV,会发生什么情况?

这个问题是针对Linux提出的。使用GCC编译器。如果SIGSEGV(我的意思是通常会导致SIGSEGV的违规行为)发生在旨在捕获SIGSEGV的信号处理程序中,可以预期会有什么行为?有助于讨论的代码示例:/*Inmainorwhatever*/{structsigactionsa={};/*initialisedtoallzero(IvoteforGCCstylebreachofstandardhere)*/sa.sa_handler=DisasterSignals;sa.sa_flags=SA_RESETHAND|SA_NODEFER;/*Tohaveorhavenot*/siga

c - 如何知道程序是否通过信号结束执行?

我正在编写一个程序监视器作为操作系统类(class)的作业(虽然非常基础,就像对它的介绍)。监视器必须做的一件事是显示它正在监视的程序的终止代码,如果它因“自然原因”结束或导致其终止的信号代码。现在我只是在等待子进程结束它的执行,然后捕获它的终止代码。这是相关的代码片段:pid_tid=-1;switch(id=fork()){//Errorwhenforking:case-1:error(-1,"Somethingwentwrongwhenforking.");exit(-1);//Codeforthechildprocess:case0://Justlaunchtheprogram

c - 如何知道程序是否通过信号结束执行?

我正在编写一个程序监视器作为操作系统类(class)的作业(虽然非常基础,就像对它的介绍)。监视器必须做的一件事是显示它正在监视的程序的终止代码,如果它因“自然原因”结束或导致其终止的信号代码。现在我只是在等待子进程结束它的执行,然后捕获它的终止代码。这是相关的代码片段:pid_tid=-1;switch(id=fork()){//Errorwhenforking:case-1:error(-1,"Somethingwentwrongwhenforking.");exit(-1);//Codeforthechildprocess:case0://Justlaunchtheprogram

c++ - 使用 C/C++ 的 POSIX 上的物理磁盘 block 大小

我正在开发一个高性能I/O程序,我正试图找到确定_physical_(而不是_logical_)字节的最佳方法使用C++计算设备磁盘block的大小。到目前为止,我的研究使我得到了以下代码片段:#include#include#include#includeintmain(intargc,char**argv){//fileinformationincludingblocksizeofthedevicestructstatinfo;//devicetogetblocksizefromchar*device="/mnt/hdb1";if(stat(device,&info)){print

c++ - 使用 C/C++ 的 POSIX 上的物理磁盘 block 大小

我正在开发一个高性能I/O程序,我正试图找到确定_physical_(而不是_logical_)字节的最佳方法使用C++计算设备磁盘block的大小。到目前为止,我的研究使我得到了以下代码片段:#include#include#include#includeintmain(intargc,char**argv){//fileinformationincludingblocksizeofthedevicestructstatinfo;//devicetogetblocksizefromchar*device="/mnt/hdb1";if(stat(device,&info)){print

c++ - 从信号处理程序中唤醒线程

据我所知,ISO/C++11中的信号处理程序唯一允许做的事情是读取或写入无锁原子变量或volatilesig_atomic_t(我相信,POSIX更宽松一点,允许调用一堆系统函数)。我想知道是否有任何方法可以唤醒正在等待条件变量的线程。IE。像这样的东西:#include#include#includestd::mutexmux;std::condition_variablecv;std::atomic_booldoWait{true};voidsignalHandler(int){doWait=false;cv.notify_one();}intmain(){//registersi