草庐IT

java - JRE 是否支持 posix TZ 描述而不是 TZ 名称?

当操作系统使用POSIX时区描述而不是时区名称时,Java似乎不会应用DST偏移量。JRE不支持使用TZ描述,还是此行为是错误?更多详情...我在基于Linux(Debian)的系统上工作,其中TZ环境变量设置为POSIX格式的TZ,如STD+7DST+6,M3.2.0/02:00:00,M11.1.0/02:00:00而不是TZ名称,例如America/Denver。(参见TZVariable)虽然这对于date和相关系统工具似乎可以正常工作,但当我尝试在java应用程序中查找时间时,它似乎没有针对DST进行正确调整。这会导致DST生效的一年中部分时间出现错误。我已经在几个不同的系统

c - 期望在 Linux 中 fd < 最大打开文件描述符数是否合理?

我正在编写一个需要处理许多打开的套接字的服务器,所以我使用setrlimit()来设置打开文件描述符的最大数量(作为root,在删除权限之前),如下所示:#include#defineMAX_FD_C9001if(setrlimit(RLIMIT_NOFILE,&(structrlimit){.rlim_cur=MAX_FD_C,.rlim_max=MAX_FD_C})==-1){perror("Failedtosetthemaximumnumberofopenfiledescriptors");returnEXIT_FAILURE;}现在,我意识到可能没有任何保证,而且我受制于Lin

linux - 每个 Unix 文件描述都有自己的读/写缓冲区吗?

引用thisquestion关于read()和write(),我想知道是否每个打开的文件描述都有自己的读写缓冲区,或者当文件一次打开多次时是否可能只有一个读写缓冲区。我很好奇,因为这会对重叠写入同一文件的确切情况产生影响。也许这是因Unix而异的东西?(据我了解,“文件描述”指的是有关打开文件的信息/选项,例如当前标记位置。相比之下,“文件描述符”仅指进程中用来引用的数字描述。) 最佳答案 这有点取决于您是在谈论套接字还是实际文件。严格来说,描述符从来没有自己的缓冲区;它只是更深层次抽象的句柄。文件系统对象有它们自己的缓冲区,至少在

linux - nftw(FTW_CHDIR)中的文件描述符泄漏?

我正在使用POSIX调用nftw()来遍历目录结构。目录结构是扁平的——只有4个文件,没有子目录。然而,当我在这个平面目录上多次调用nftw()时,一段时间后我收到一条错误消息:"toomanyopenfilehandles".事实证明,当使用标志FTW_CHDIR时会发生这种情况。您是否同意这是nftw()的Linux实现中的错误?更新glibc存储库中现已提供修复程序。以下是我用于测试的源代码的一些链接:main.cpp:http://sourceware.org/bugzilla/attachment.cgi?id=4586&action=view生成文件:http://sour

C - 程序仅在使用 GDB 运行时无法获取文件描述符

我不是专业的C程序员。我在使用GDB调试程序时遇到问题。(我试图修复的错误与我在这里询问的问题无关。)我的问题是当我直接从shell运行二进制文件时程序运行良好,但当我使用GDB运行它时程序崩溃。这里有一些关于该程序的信息可能有用:它是一款已有20多年历史的数据库软件,最初是为Solaris编写的(我认为)但后来移植到Linux,它是setuid(但不是root,感谢上帝)。尝试打开文件进行写入时,程序在GDB中崩溃。使用GDB,我能够确定发生崩溃是因为以下系统调用失败:fd=open(path,O_WRONLY|O_CREAT|O_TRUNC,0644);澄清一下:path是一个锁文

c - 为什么fork后关闭文件描述符会影响子进程?

我想通过单击按钮在linux中运行程序,因此我编写了一个函数execute:voidexecute(constchar*program_call,constchar*param){pid_tchild=vfork();if(child==0)//childprocess{intchild_pid=getpid();char*args[2];//argumentsforexecargs[0]=(char*)program_call;//firstargumentisprogram_callargs[1]=(char*)param;//closeallopenedfiledescripto

c - 防止重用文件描述符

在Linux中(或者更普遍地在POSIX操作系统中)是否有保证在程序执行期间不会重用文件描述符,即使一个文件关闭而另一个文件打开?我的理解是,这种情况通常会导致关闭文件的文件描述符被重新分配给新打开的文件。我正在做一个I/O跟踪项目,如果我可以假设在open()/fopen()调用之后,对该文件描述符的所有后续I/O都指向同一个文件,这将使生活变得更简单.我将采用编译时或运行时解决方案。如果不可能,我可以在处理跟踪文件时进行自己的核算(注意所有打开和关闭调用的位置),但我更愿意在执行跟踪程序期间解决问题。 最佳答案 请注意POSIX

c - 在没有先调用 munmap() 的情况下关闭文件描述符后,mmap() 指针的行为是什么?

考虑以下代码片段:#include#include#include#includeintfd=open("/path/to/existing/file/or/device",O_RDONLY);intnumberOfWords=4096;//chosentobesmallerthanfilesizeint*data=mmap(NULL,nomberOfWords*sizeof(int),PROT_READ,MAP_SHARED,fd,0);if(data!=MAP_FAILED){printf("%d\n",data[0]);//oops,forgottomunmapclose(fd)

c++ - 像文件描述符(fstream)一样处理套接字描述符? C++/Linux

我偶然发现我可以在套接字描述符上使用读写。我能否以某种方式(ab)使用fstream机制将数据输出到套接字描述符中? 最佳答案 标准文件流不支持使用文件描述符。然而,I/O流类使得创建您自己的抽象变得相当容易,这允许创建您自己的字符源或目标。神奇的类是std::streambuf,它的职责是缓冲字符并在适当的时候读取或写入字符。NicolaiJosuttis的"TheC++StandardLibrary"详细描述了如何这样做(我多年前为Nico做出贡献的基础)。使用套接字进行读写的流缓冲区的简单实现如下所示:#include#inc

c++ - 如何在 cout 上使用 isatty(),或者我可以假设 cout == 文件描述符 1?

好吧,基本上,主题说明了一切。我有一个命令行实用程序,可以使用管道或i/o重定向以交互方式或在脚本中使用。我正在为i/o使用cin和cout,如果输出是控制台,我想在最后写一个额外的EOL,这样用户提示将从下一行。在脚本中,这将是有害的。我可以假设cin==0,cout==1吗?我知道没有干净的方法来获取流的文件描述符。或者是? 最佳答案 如果使用Linux(可能还有其他unix,但绝对不是Windows),您可以尝试isatty.没有从C++流中提取文件描述符的直接方法。但是,由于在C++程序中cout和stdout都是同时存在和