相关疑难解决方法(0)

当输出重定向到文件时,printf()和system()的结果顺序错误

我有一个C程序编译成一个名为myprogram的可执行文件.这是它的主要功能:

int main(int argc, char ** argv) {
  printf("this is a test message.\n");
  system("ls");

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我myprogram > output.txt在Linux shell中运行然后检查output.txt时,我看到ls上面列出的输出"这是一条测试消息".

我觉得应该是相反的方式.为什么会发生这种情况,我能做些什么,以便"这是一条测试消息"出现在output.txt的顶部?

如果重要的话,我是C的新手并且在命令行中工作.

c linux printf child-process io-redirection

98
推荐指数
3
解决办法
4834
查看次数

使用PHP中的实时输出运行进程

我正在尝试在网页上运行一个将实时返回其输出的进程.例如,如果我运行'ping'进程,它应该在每次返回一个新行时更新我的​​页面(现在,当我使用exec(命令,输出)时,我被迫使用-c选项并等待进程完成以查看在我的网页上输出).有可能在PHP中这样做吗?

我也想知道当有人离开页面时,杀死这种过程的正确方法是什么.在"ping"过程中,我仍然可以看到系统监视器中运行的进程(有意义).

php linux apache real-time process

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

printf无法在控制台上打印

我开始用C语言了.我使用eclipse(juno)作为我的IDE并安装了CDT插件.我还解压缩了mingw64(GCC编译器).我写了一个非常简单的程序,看它是否有效.这是我的代码:

#include <stdio.h>

int main()
{
    int age;
    printf("Hello, please enter your age:\n");
    scanf("%d", &age);
    printf("Your age is %d", age);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

问题是输出缓冲区填充了第一个字符串的值,printf但不会将其输出到控制台.我必须输入一个数字,然后只有缓冲区将所有数据倒入控制台,所以我看到控制台是这样的:

1
Hello, please enter your age:
Your age is 1
Run Code Online (Sandbox Code Playgroud)

而不是预期的:

Hello, please enter your age:
1
Your age is 1
Run Code Online (Sandbox Code Playgroud)

现在,我发现我可以fflush(stdout)在第一个之后使用,printf但我不认为这个解决方案是优雅的,甚至是必要的.关于如何克服这个问题的任何想法?

编辑 - 因为我在大学里学习这个,我不能使用课程中没有学到的东西,所以我只能使用printfscanf

新编辑 - 我想我已经找到了解释.正如我所说,我正在输出到Eclipse内的控制台视图.奇怪的是,如果我从Windows的命令行编译并运行程序,我得到想要的结果.因此,我认为eclipse实际上是将输出写入文件并在控制台窗口中显示.如何强制eclipse在我的运行配置中打开一个真正的命令行窗口?

c eclipse printf gcc scanf

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

为什么GIL不阻止Python I/O绑定任务?

蟒蛇线程 文档指出"......线程仍然是一个合适的模型,如果你想同时运行多个I/O密集型任务",这显然是因为I/O密集型进程能够避免,防止线程并发执行的GIL CPU绑定任务.

但我不明白的是I/O任务仍然使用CPU.那怎么能不遇到同样的问题呢?是因为I/O绑定任务不需要内存管理吗?

python multithreading

35
推荐指数
2
解决办法
9327
查看次数

在C中写入stdout是什么意思?

写入"stdout"的程序是否写入文件?屏幕?我不明白写入stdout意味着什么.

c unix stdout

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

如何在C中关闭stdout的缓冲

我想关闭stdout的缓冲以获取以下代码的确切结果

while(1) {
printf(".");
sleep(1);
}
Run Code Online (Sandbox Code Playgroud)

代码printf一堆'.' 只有当缓冲区被填满时

c

32
推荐指数
3
解决办法
3万
查看次数

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

行为printf()似乎取决于的位置stdout.

  1. 如果stdout发送到控制台,则printf()行缓冲并在打印换行符后刷新.
  2. 如果stdout被重定向到文件,则除非fflush()被调用,否则不刷新缓冲区.
  3. 此外,如果printf()stdout重定向到文件之前使用,则后续写入(对文件)是行缓冲的并在换行后刷新.

何时进行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 2a: stdout is not line-buffered when …
Run Code Online (Sandbox Code Playgroud)

c linux stdout

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

printf何时无法打印?

c中的printf函数并不总是在屏幕上打印输出.例如,如果您忘记将\n放在字符串的末尾,那么您有时会得不到o/p.printf无法打印时是否还有其他一些条件.我记得有人说有7个这样的条件.你能帮忙吗?

c printf

16
推荐指数
2
解决办法
3万
查看次数

为什么stdout缓冲?

我正在尝试学习libuvapi并编写以下测试:

#include <stdio.h>
#include <stdlib.h>
#include <uv.h>

void timer_cb(uv_timer_t* timer) {
    int* i = timer->data;
    --*i;
    if(*i == 0) {
       uv_timer_stop(timer);
    }
    printf("timer %d\n", *i);
    //fflush(stdout);
}

int main() {
    uv_loop_t* loop = uv_default_loop();
    uv_timer_t* timer = malloc(sizeof(uv_timer_t));
    uv_timer_init(loop, timer);
    int i = 5;
    timer->data = &i;
    uv_timer_start(timer, timer_cb, 1000, 2000);

    uv_run(loop, UV_RUN_DEFAULT);

    printf("Now quitting.\n");
    uv_close(timer, 0);
    uv_loop_close(loop);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

运行它时,在程序完成运行之前不会显示任何输出,然后立即显示所有输出.如果我取消注释fflush它按预期工作,则每2秒写一次.

有人可以向我解释一下吗?为什么stdout如解释不换行后刷新,在这里和在其他地方?为什么我需要手动冲洗它?

c libuv

11
推荐指数
2
解决办法
2169
查看次数

为什么Rust函数和FFI C++函数以相反的顺序执行?

我试图将外部C++函数与我的Rust应用程序链接.此函数有效,但它的执行顺序与从Rust代码调用的顺序不同.

为什么会这样?这记录了吗?

以下是Rust应用程序的列表:

extern crate libc;
use libc::c_int;

#[link(name = "Project1", kind = "static")]
extern "C" {
    pub fn lib_fun(i: c_int) -> c_int;
}

fn main() {
    unsafe {
        lib_fun(2);
    }
    println!("from Rust: {}", 2);
}
Run Code Online (Sandbox Code Playgroud)

"Project1"库看起来像这样:

#include <stdio.h>

extern "C" {
    int lib_fun(int t) {
        printf("from C++: %d\n", t);
        return t;
    }
}
Run Code Online (Sandbox Code Playgroud)

预期产量:

from C++: 2
from Rust: 2
Run Code Online (Sandbox Code Playgroud)

实际输出顺序相反:

from Rust: 2
from C++: 2
Run Code Online (Sandbox Code Playgroud)

外部函数是lib_func在另一个线程中执行的吗?为什么?

细节:

  • 平台:Windows 7,x64,
  • 锈:1.26.0(每晚),
  • C++:Microsoft Visual Studio社区2017预览版15.7.0预览版2.0
  • 终端:IntelliJ IDEA的集成终端.

c++ rust

10
推荐指数
1
解决办法
375
查看次数