小编Pat*_*ick的帖子

为什么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万
查看次数

为什么multiprocessing.Process在windows和linux上对全局对象和函数参数的行为不同

在windows和linux上运行时,以下代码具有不同的输出(均使用python2.7)

'''import_mock.py'''
to_mock = None
Run Code Online (Sandbox Code Playgroud)
'''test.py'''
import import_mock
from multiprocessing import Process

class A(object):
    def __init__(self):
        self.a = 1
        self.b = 2
        self.c = 3

    def __getstate__(self):
        print '__getstate__'
        return { 'a': self.a, 'b': self.b,
                 'c':0 }

def func():
    import_mock.to_mock = 1
    a = A()
    return a

def func1(a):
    print a.a, a.b, a.c
    print import_mock.to_mock


if __name__ == '__main__':
    a = func()
    p = Process(target=func1, args=(a,))
    p.start()
    p.join()
Run Code Online (Sandbox Code Playgroud)

在Windows上,输出是:

__getstate__
1 2 0
None
Run Code Online (Sandbox Code Playgroud)

这是我的预期

在linux上,它是:

1 2 3
1 …
Run Code Online (Sandbox Code Playgroud)

python multiprocessing

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

是否有任何c ++静态分析工具来检测矢量的潜在错误

请参阅rust示例中的以下代码.有没有静态分析工具来检测这个问题?

#include<iostream>
#include<vector>
#include<string>

int main() {
    std::vector<std::string> v;

    v.push_back("Hello");

    std::string& x = v[0];

    v.push_back("world");

    std::cout << x;
}
Run Code Online (Sandbox Code Playgroud)

c++ static-analysis vector

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

如何检测 FILE 对象是否已关闭?

请参阅以下代码块,如何在调用 fclose 之前确保 FILE 对象未关闭?顺便说一句,两次调用 fclose 是否安全?

    FILE* f = fopen('test.txt')

    //some code here, f may be closed by someone, but they may not set it to NULL
    ...


    /// I want to make sure f is not closed before, how can I do it here?
    if(...)
    {
       fclose(f)
    }
Run Code Online (Sandbox Code Playgroud)

c fclose

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

如果两个进程在没有锁的情况下访问同一个文件会发生什么?

在linux中:如果两个进程在没有任何锁定的情况下访问同一个文件,会发生什么?考虑以下情况:

  1. 进程A正在读取文件,而进程B正在编写文件.
  2. 进程A和进程B都写入相同的文件.
  3. 进程A正在读取文件,进程B正在复制/移动另一个文件以替换原始文件
  4. 进程A正在读取文件,进程B正在删除该文件
  5. 进程A正在写入文件,而进程B正在复制/移动另一个文件以替换原始文件
  6. 进程A正在写文件,进程B正在删除文件

linux file

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

如何在python中实现chmod uw

我知道如何使用以下代码实现chmod u + w:

st = os.stat(dest_file)
os.chmod(dest_file, st.st_mode | stat.S_IWUSR)
Run Code Online (Sandbox Code Playgroud)

但是怎么样?

python chmod

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

标签 统计

c ×2

linux ×2

python ×2

c++ ×1

chmod ×1

fclose ×1

file ×1

multiprocessing ×1

static-analysis ×1

stdout ×1

vector ×1