相关疑难解决方法(0)

mingw:使用-std = c ++ 11编译时找不到函数

我试图编译下面的代码(来自/sf/answers/33527231/).编译运行正常,如果我编译

$ g++ test.cpp
Run Code Online (Sandbox Code Playgroud)

但在使用-std=c++11开关时出错了:

$ g++ -std=c++11 test.cpp
test.cpp: In function 'std::string exec(char*)':
test.cpp:6:32: error: 'popen' was not declared in this scope
     FILE* pipe = popen(cmd, "r");
                                ^
Run Code Online (Sandbox Code Playgroud)

知道发生了什么事吗?

(我在mingw.org和WindowsXP64上使用mingw32 gcc4.8.1)

码:

#include <string>
#include <iostream>
#include <stdio.h>

std::string exec(char* cmd) {
    FILE* pipe = popen(cmd, "r");
    if (!pipe) return "ERROR";
    char buffer[128];
    std::string result = "";
    while(!feof(pipe)) {
        if(fgets(buffer, 128, pipe) != NULL)
            result += buffer;
    }
    pclose(pipe);
    return result;
}

int main() {}
Run Code Online (Sandbox Code Playgroud)

c++ mingw stdio popen c++11

8
推荐指数
1
解决办法
5888
查看次数

C++ popen()输出到一个字符串

popen()在执行进程后,C++ 将返回包含输出的文件描述符.而不是FILE*,我需要一个char*,即.一个字符串作为我的输出.我该怎么办?请帮我.

c++ string file popen

7
推荐指数
1
解决办法
1万
查看次数

将Spawned Process的输出捕获到字符串

背景:


我的工作需要能够捕捉程序stdout,stderr并返回程序的值.理想情况下,我想在我存储在我的对象中的字符串中捕获这些字符串,该字符串包含进程的详细信息.我目前有一些代码,通过使用一些(在我看来)古老的C文件句柄魔术将输出保存到文件中.任何时候我想输出结果,我打开该文件,然后打印内容.

有时(当我生成的进程继续运行时)我的可执行文件的下一次执行将会中断,因为它无法打开文件进行写入.

问题陈述:


我正在寻找一种方法来将stdout窗口中创建的进程的输出保存为一个字符串,并stderr以更安全,更现代的方式保存到另一个字符串.这样我就可以在每次输出每个创建过程的结果时打印这些内容.

我丑陋的代码:


主要块 -

    int stdoutold = _dup(_fileno(stdout)); //make a copy of stdout
    int stderrold = _dup(_fileno(stdout)); //make a copy of stderr
    FILE *f; 

    if(!fopen_s(&f, "name_of_my_file", "w")){ //make sure I can write to the file
        _dup2(_fileno(f), _fileno(stdout)); //make stdout point to f
        _dup2(_fileno(f), _fileno(stderr)); //make stderr point to f

        fork("command_I_want_to_run", &pi); //run my fake fork (see below)
    }
    else{
        ...//error handling
    }
    _close(_fileno(stdout)); //close tainted stdout
    _close(_fileno(stderr)); //close …
Run Code Online (Sandbox Code Playgroud)

c++ parallel-processing logging

7
推荐指数
1
解决办法
1万
查看次数

用C++查看system()调用的输出

如何查看系统命令的输出.例如:

int _tmain(int argc, _TCHAR* argv[]) {

   system("set PATH=%PATH%;C:/Program Files (x86)/myFolder/bin");
   system("cd C:/thisfolder/");

   std::cin.get();
   return 0;

}
Run Code Online (Sandbox Code Playgroud)

当我在Visual Studio中运行程序时,它给我一个黑屏,我看不到正在运行的命令.我需要它,所以我可以查看它是否有效.谢谢!

c++ windows command-line cmd system

7
推荐指数
1
解决办法
3668
查看次数

如何在C中检查文件是文本(ASCII)还是二进制

我需要编写C代码来检查文件是文本(ASCII)还是二进制文件

有人可以帮忙吗?谢谢

c binary ascii

6
推荐指数
2
解决办法
6109
查看次数

如何在C++中执行命令并获取返回代码stdout和stderr命令

给出以下答案(第一个c ++ 11答案):

如何使用POSIX执行命令并在C++中获取命令输出?

以下是您的实施方便:

#include <cstdio>
#include <iostream>
#include <memory>
#include <stdexcept>
#include <string>
#include <array>

std::string exec(const char* cmd) {
    std::array<char, 128> buffer;
    std::string result;
    std::shared_ptr<FILE> pipe(popen(cmd, "r"), pclose);
    if (!pipe) throw std::runtime_error("popen() failed!");
    while (!feof(pipe.get())) {
        if (fgets(buffer.data(), 128, pipe.get()) != nullptr)
            result += buffer.data();
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

这非常适合执行命令(例如std::string res = exec("ls");)并将stdout转换为字符串.

但它没有做的是获取命令返回码(通过/失败整数)或stderr.理想情况下,我想要一种方法来获取所有三个(返回代码,stdout,stderr).

我会满足于stdout和stderr.我想我需要添加另一个管道,但是我无法真正看到第一个管道是如何设置来获得stdout所以我无法想象我将如何更改它以获得两者.

任何人都有任何想法如何做到这一点,或可能有效的替代方法?

更新

看到我的完整的例子这里 witht输出:

Start
1 res: /home

2 res: stdout

stderr
3 res: 
End
Run Code Online (Sandbox Code Playgroud)

您可以看到它3 res:不会以相同的方式打印stderr …

c++ stdout process stderr c++11

6
推荐指数
4
解决办法
4157
查看次数

启动进程并重定向其 stdio 的跨平台方式

我想知道是否有一个跨平台(Windows、Linux、BSD)库,我可以用它异步启动一个进程,并iostream为其标准管道提供类似的包装器。

我希望它能够知道进程何时终止。

谢谢。

c++ stdio

5
推荐指数
1
解决办法
2110
查看次数

如何从Windows中的C++程序执行另一个exe

我希望我的C++程序在Windows中执行另一个.exe.我该怎么做?我正在使用Visual C++ 2010.

这是我的代码

#include "stdafx.h"
#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    unsigned int input;
    cout << "Enter 1 to execute program." << endl;
    cin >> input;
    if(input == 1) /*execute program here*/;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ windows

5
推荐指数
4
解决办法
5万
查看次数

在Android L NDK中替换`__system_property_get`

自Android L NDK起__system_property_get删除(https://groups.google.com/a/chromium.org/forum/#!topic/chromium-reviews/keQP6L9aVyU).Android L NDK中是否有另一个API可以访问相同的属性值?

android-ndk-r5

5
推荐指数
1
解决办法
5229
查看次数

是否有可能杀死在 C 中使用系统 api 启动的命令?如果没有其他选择?

我正在使用系统 api 启动一个命令(我可以将这个 api 与C/C++一起使用)。我传递的命令有时可能会挂起,因此我想在特定超时后终止。

目前我将它用作:

system("COMMAND");
Run Code Online (Sandbox Code Playgroud)

我想像这样使用它:

使用独立于系统的 API 运行命令(我不想使用 CreateProcess,因为它仅适用于 Windows)如果它在“X”分钟后没有退出,则终止该进程。

c c++

5
推荐指数
2
解决办法
4151
查看次数