gpt4 book ai didi

c - 无法从子进程内部将数据写入文件

转载 作者:行者123 更新时间:2023-11-30 20:00:21 25 4
gpt4 key购买 nike

我在 C 程序中有两个函数,create_open_log_file()write_to_log_file() 以及一个全局文件指针。

当这些函数被调用时,日志文件将按预期创建(我可以在目录中看到它)。然后调用 write_to_log_file() 并创建一个子进程。此时,我预计字符串 test test test 将循环写入此文件。字符串 child process 打印在终端上,我知道代码正在被执行。但是日志文件没有内容?

如果有人能告诉我我是否做了一些明显错误的事情,我将不胜感激。

FILE *log_file;

static void create_open_log_file(void) {

char filename[40];
time_t t = time(NULL);
struct tm *tm = localtime(&t);
char s[64];
strftime(s, sizeof(s), "%a%b%d%T", tm);
sprintf(filename, "dut1_serial_log_%s", s);

log_file = fopen(filename,"w");

if (log_file == NULL) {
perror("Error creating log file");
}

}




static write_to_log_file() {


// Prevent killed child-processes remaining as "defunct"
struct sigaction sigchld_action = {
.sa_handler = SIG_DFL,
.sa_flags = SA_NOCLDWAIT
};
sigaction( SIGCHLD, &sigchld_action, NULL ) ;


// Duplicate ("fork") the process. Will return zero in the child
// process, and the child's PID in the parent (or negative on error).
int pid = fork();
global_pid = pid;
if( pid < 0 ) {
printf( "Fork failed\n" ) ;
return 1 ;
}


// ------------ Child process
if( pid == 0 ) {
// ------------ Child process

// Open log file and write to it from /dev/USB1

create_open_log_file();

while( 1 ) {
printf( "child process\n" ) ;

char str[] = "test test test";

fwrite(str , 1 , sizeof(str) , log_file);


sleep(1) ;
}
return 0 ; //never reached
}
}

最佳答案

从快速代码审查来看,子进程似乎永远不会关闭文件,因此数据可能会也可能不会到达文件。

啊。因为它是一个无限循环,所以你真的不打算结束。是的。刷新缓冲区通常会将数据一直发送到磁盘,我猜这就是您真正想要的。

关于c - 无法从子进程内部将数据写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45400823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com