我在c程序中有兩個爐臺,create_open_log_file()
和write_to_log_file()
以及一個全局文件指針。c - 無法將數據寫入子進程內的文件
當這些函數被調用時,日誌文件按預期創建(我可以在目錄中看到它)。然後調用write_to_log_file()
並創建子進程。在這一點上,我會預期字符串test test test
將被寫入該文件中的一個循環。字符串child process
打印在終端o我知道代碼正在執行。但是,日誌文件沒有內容?
我會appreicate是否有人可以告訴我,如果我做一些明顯的錯誤。
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
}
}
請清理代碼的縮進。預覽不適合你嗎? – alk
嘗試[*清空*](http://en.cppreference.com/w/c/io/fflush)文件的緩衝區。 –
@alk抱歉 - 現在修復。 –