Articles of Linux操作系统

确定在C ++中是Linux还是Windows

我正在用C ++编写一个跨平台兼容的函数,根据input文件名创build目录。 我需要知道该机器是Linux还是Windows,并使用适当的正斜杠或反斜杠。 对于下面的代码,如果机器是Linux,那么isLinux = true 。 我如何确定操作系统? bool isLinux; std::string slash; std::string directoryName; if isLinux slash = "/"; else slash = "\\"; end boost::filesystem::create_directory (full_path.native_directory_string() + slash + directoryName);

在Windows和GNU / Linux上c mktime是不同的?

下面的代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <sys/time.h> static const char * wday_abb_names[] = { "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun", }; static void mb_setenv(const char *name, const char *value) { #if !(defined _WIN32) || defined HAVE_SETENV setenv(name, value, 1); #else int len = strlen(name)+1+strlen(value)+1; char *str = malloc(len); sprintf(str, "%s=%s", […]

安装JDK时出错:keytool命令需要安装proc fs(/ proc)。 适用于Linux的Windows子系统

我正在尝试在Linux(Ubuntu 14.04)的Windows子系统上安装Oracle JDK 1.7,并且出现以下错误: the keytool command requires a mounted proc fs (/proc). 而且Java的安装失败了很多错误: the keytool command requires a mounted proc fs (/proc). dpkg: error processing package ca-certificates-java (–configure): subprocess installed post-installation script returned error exit status 1 dpkg: dependency problems prevent configuration of openjdk-6-jre-headless:amd64: openjdk-6-jre-headless:amd64 depends on ca-certificates-java; however: Package ca-certificates-java is not configured […]

基准cp + git on linux vs Windows:为什么这样的区别?

我使用这个Python脚本创build了大量的文件,我主要用它来testingGit。 结果是非常惊人的,尤其是Windows和Linux之间的差异。 基本上我的脚本创build了12个目录,每个目录都有512个文件。 每个文件大约2到4 kB。 使用Git对象的版本库大约有12k个文件。 我做了基准testing: 时间把所有的文件git add .到git git add . 结帐前一个分支的时间 有时间在相同的SSD上复制存储库 时间将存储库复制到外部SATA硬盘(NTFS) 我在Windows 10和Linux上使用同一个存储库来完成这个任务: Operation Linux Windows Ratio ——— —– ——- —– 1. git add . 0.47s 21.7s x46 2. git checkout HEAD~1 0.35s 16.2s x46 3. git checkout . 0.40s 20.5s x50 4. cp -r ssd->ssd 0.35s 1m14s x211 5. […]

在Windows 10上运行LLVM传递在terminal没有输出?

我有来自LLVM.org的示例代码: #include "llvm/Pass.h" #include "llvm/IR/Function.h" #include "llvm/Support/raw_ostream.h" using namespace llvm; namespace { struct Hello : public FunctionPass { static char ID; Hello() : FunctionPass(ID) {} bool runOnFunction(Function &F) override { errs() << "Hello: "; errs().write_escaped(F.getName()) << '\n'; return false; } }; // end of struct Hello } // end of anonymous namespace char Hello::ID = […]

有没有办法改变Unix的另一个进程的环境variables?

在Unix上,有没有什么办法可以让一个进程改变别人的环境variables(假设他们都是由同一个用户运行的)? 一般的解决办法是最好的,但如果不是,那么一个是另一个的孩子的具体情况呢? 编辑:如何通过GDB?

Linux阻塞与非阻塞串行读取

我有这个代码在Linux下从串口读取,但是我不知道在读取串口时阻塞和非阻塞有什么区别,哪种情况更好?

如何configurationQt从Linux到Windows目标的交叉编译?

我想要使​​用Linux x86_64主机来交叉编译Qt库(最终是我的应用程序)以获得Windows x86_64目标。 我觉得我很接近,但是我可能对这个过程的某些部分有一个根本性的误解。 我开始在我的Fedora机器上安装所有的mingw包,然后修改win32-g++ qmake.conf文件以适合我的环境。 不过,我似乎被Qt: -platform和-xplatform一些看似明显的configuration选项卡住了。 Qt的文档说,平台应该是主机架构(你正在编译的地方),- -xplatform平台应该是你希望部署的目标平台。 在我的例子中,我设置了-platform linux-g++-64和-xplatform linux-win32-g++ ,其中linux-win32-g ++是我修改的win32-g ++configuration。 我的问题是,执行configuration这些选项后,我看到它调用我的系统的编译器,而不是交叉编译器(x86_64-w64-mingw32-gcc)。 如果我省略-xplatform选项并将-platform设置为我的目标规范(linux-win32-g ++),那么它会调用交叉编译器,但是如果发现某些与Unix相关的函数没有定义,则会发生错误。 以下是我最近一次尝试的一些输出: http : //pastebin.com/QCpKSNev 。 问题: 当从Linux主机交叉编译类似Qt for Windows的应用程序时, 是否应该调用本地编译器? 也就是说,在交叉编译过程中,我们不应该只使用交叉编译器吗? 当我指定-xplatform选项时,我不明白为什么Qt的configuration脚本会尝试调用我的系统的本机编译器。 如果我正在使用mingw交叉编译器,那么我何时需要处理规格文件? 海湾合作委员会的规格文件仍然是我的一个谜,所以我想知道如果这里的一些背景将帮助我。 一般来说,除了在我的qmake.conf中指定一个交叉编译器之外,我还需要考虑什么呢?

为什么stdout在redirect到文件时需要显式刷新?

printf()的行为似乎取决于stdout的位置。 如果stdout被发送到控制台,则printf()是行缓冲的,并在打印换行符后被刷新。 如果stdout被redirect到一个文件,除非fflush()被调用,否则缓冲区不会被刷新。 而且,如果在将stdoutredirect到文件之前使用printf() ,则后续写入(到文件中)将被行caching,并在换行之后刷新。 什么时候stdout行缓冲,什么时候fflush()需要被调用? 每个的最小示例: void RedirectStdout2File(const char* log_path) { int fd = open(log_path, O_RDWR|O_APPEND|O_CREAT,S_IRWXU|S_IRWXG|S_IRWXO); dup2(fd,STDOUT_FILENO); if (fd != STDOUT_FILENO) close(fd); } int main_1(int argc, char* argv[]) { /* Case 1: stdout is line-buffered when run from console */ printf("No redirect; printed immediately\n"); sleep(10); } int main_2a(int argc, char* argv[]) { /* Case […]

清除terminal程序的输出Linux C / C ++

我有兴趣清除一个用多行printf语句生成的C程序的输出。 我最初的猜测是使用 printf("output1\n"); printf("output2\n"); rewind(stdout); printf("output3\n"); printf("output4\n"); 但是这产生 output1 output2 output3 output4 我希望它会产生 output3 output4 有谁知道如何得到后者的结果?