相关疑难解决方法(0)

在C中,stdout缓冲区的大小是多少?

今天我了解到,当stdout设置为终端并在不同情况下进行缓冲时,它是行缓冲的.因此,在正常情况下,如果我使用printf()而不使用终止'\n',则仅当缓冲区已满时才会在屏幕上打印.如何获得这个缓冲区的大小,这有多大?

c unix linux

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

Ruby IO.popen STDOUT缓冲

我正在编写一个脚本,它使用IO.popen打开另一个程序并不断读取数据.就像这样:

process = IO.popen(["/the/program", "argument", "argument"])

loop do
  line = process.gets
  puts "#{line}"
end
Run Code Online (Sandbox Code Playgroud)

(实际的程序不仅仅是打印输出,显然 - 这只是一个例子.)

我遇到的问题是popen似乎是从打开的进程中缓冲STDOUT.我已经通过直接从shell运行程序并通过popen并排运行来确认这一点,并且Ruby一次不会获得一行.它总是一次获得多行,并且被延迟.

我试过了

STDOUT.sync = true
Run Code Online (Sandbox Code Playgroud)

...在popen之前,但没有改变任何东西.

有问题的程序肯定使用\n作为新行,所以这不是问题.

ruby popen

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

使用sleep()时,C中的puts()和printf()之间的区别

我想知道使用sleep()函数时puts()和printf()函数之间的区别.

这是我的代码(C语言):

printf("hello, world");
sleep(1);
printf("Good, bye!");
Run Code Online (Sandbox Code Playgroud)

编译并运行程序后,它似乎先睡了然后打印"你好,世界好,再见!"

但是,如果使用puts()而不是printf(),它将打印"hello,world"然后睡眠,最后打印"Good,bye".

puts("hello, world");
sleep(1);
puts("Good, bye!);
Run Code Online (Sandbox Code Playgroud)

c sleep puts

7
推荐指数
2
解决办法
3329
查看次数

Python sys.stderr刷新频率

sys.stderr多久刷新一次缓冲区,这是不同环境中的标准?

>>> import sys
>>> sys.__stderr__
<open file '<stderr>', mode 'w' at 0x2b4fcb7ac270>
Run Code Online (Sandbox Code Playgroud)

我看到它只是一个标准的文件类型,但我不知道它应该是什么缓冲值.dir()似乎也没有产生任何有用的信息.

python buffer flush stderr

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

C++:cout语句会使代码变慢

我正在从文件中读取大约300万行并将它们插入到STL映射中.所以,在我的while循环中,我从文件中读取每一行,我还打印到通过一个简单的cout语句控制它是什么行号.我的一位朋友最近指出,这会使代码变慢.我想知道这是否属实,是不是为什么?

c++

6
推荐指数
3
解决办法
7004
查看次数

当pty [伪终端]从属fd设置被"tcsetattr"改变时,主端如何无延迟地捕获此事件?

slave fd被另一个应用程序(比如"A")用作串行端口设备.

A将设置其波特率/停止位等.我的应用程序需要此信息.

顺便说一下,有没有办法让只有主fd打开的进程被通知所有ioctl()发给奴隶fd的电话?

linux ioctl pty

6
推荐指数
1
解决办法
877
查看次数

printf() 的时间复杂度?

我想确定 printf 的时间复杂度,例如:

{
    printf("%d",
           i);
}
Run Code Online (Sandbox Code Playgroud)

或者:

{
    printf("%c",
           array[i]);
}
Run Code Online (Sandbox Code Playgroud)

假设 printf 的时间复杂度始终为 O(1) 是否正确?

[编辑] 让我们采用一个交换两个值的函数:

void swap(...)

{

      tmp = x;
      x = y;    
      y = tmp;  

}
Run Code Online (Sandbox Code Playgroud)

每个赋值表达式的成本为 1(就时间复杂度而言),因此 T(n) = 1 + 1 + 1 = 3,这意味着 O(1)。但对于这个功能我能说什么呢?

void swap(...)

{

      tmp = x;
      x = y;    
      y = tmp;  

      printf("Value of x: %d", x);
      printf("Value of y: %d", y);

}
Run Code Online (Sandbox Code Playgroud)

在这种情况下我可以说 T(n) 仍然是 O(1) 吗?

c time complexity-theory big-o printf

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

Bash输出流写入文件

所以我在bash上运行这个:

# somedevice -getevent
Run Code Online (Sandbox Code Playgroud)

这个命令的作用就是它一直在运行,每当我的设备发送某个数据时,说它检测到温度的变化,它输出这样的东西

/dev/xyz: 123 4567 8910112238 20
/dev/xyz: 123 4567 8915712347 19
/dev/xyz: 123 4567 8916412345 22
/dev/xyz: 123 4567 8910312342 25
/dev/xyz: 123 4567 8910112361 18
/dev/xyz: 123 4567 8910112343 20
Run Code Online (Sandbox Code Playgroud)

这只是一直运行,一旦有任何原因它输出一些东西.所以执行无止境.

没有回声正常工作,但是当我尝试使用'>'运算符时,这似乎不会写入文件.

所以举个例子

#somedevice -getevent > my_record_file
Run Code Online (Sandbox Code Playgroud)

这不能正常工作,my_record_file只能间隔地写入数据,但是我想立即写入.

有任何想法吗?

linux bash shell ubuntu

4
推荐指数
1
解决办法
6605
查看次数

进程中的 fork()、wait() 和 exit() 功能

我有一个 C 源代码,如下所示。

#include<stdio.h>
#include<stdlib.h>
#include<sys/wait.h>
#include<unistd.h>
#include<sys/types.h>

int main(void) {

   pid_t process_id;
   int status;

   if (fork() == 0) 
   {
       if (fork() == 0)
       {
           printf("A");
       } else {
           process_id = wait(&status);
           printf("B");
       }
   } else {
       if (fork() == 0)
       {
           printf("C");
           exit(0);
       }
       printf("D");
   }
   printf("0");
   return 0;   
}
Run Code Online (Sandbox Code Playgroud)

当我在终端中执行它时,我在这张图片中出现了一些输出:

上面编写的源代码的一些输出

我实际上很困惑这些输出是如何生成的。例如, D0A0~$ B0C 是如何生成的。

谁能解释一下这些输出是如何生成的,以及这段代码中 exit(0) 的功能?

c unix operating-system fork wait

3
推荐指数
1
解决办法
115
查看次数

你能解释fflush()和重定向输出在这里发生了什么吗?

所以我写了一个测试程序,这里是代码

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

int main(void)
{
    int i;
    printf("%s", "entering\n");
    fflush(stdout);
    for (i = 0 ; i < 3 ; i++)
    {
        fork();
        fflush(stdout);
    }

    printf("%s", "exiting\n");
}
Run Code Online (Sandbox Code Playgroud)

当我在终端中编译并运行它时,它会显示我所期望的:"进入"一次,"退出"一些.当我运行它并将输出重定向到文件时,它会显示每个退出的输入.

1)为什么每次都不向终端和文件输出相同的东西?

2)为什么它显示8次输入文件但没有在终端输入一次(一次是我期望它做的).

3)当我的输出转到文件时,fflush()语句会有所不同吗?

c multithreading

2
推荐指数
1
解决办法
893
查看次数

标签 统计

c ×5

linux ×3

unix ×2

bash ×1

big-o ×1

buffer ×1

c++ ×1

complexity-theory ×1

flush ×1

fork ×1

ioctl ×1

multithreading ×1

operating-system ×1

popen ×1

printf ×1

pty ×1

puts ×1

python ×1

ruby ×1

shell ×1

sleep ×1

stderr ×1

time ×1

ubuntu ×1

wait ×1