【发布时间】:2012-07-16 00:48:58
【问题描述】:
我需要使用 reboot() 系统调用(用 ARM 重新启动内核 2.6.29),我尝试了以下代码:
#include <stdio.h>
#include <linux/reboot.h>
#include <unistd.h>
int main()
{
reboot(LINUX_REBOOT_CMD_RESTART);
}
效果很好!但我想知道的是在重新启动内核后我丢失了正在保存的文件。 我的意思是如果使用此代码,“url”文件在重新启动后不会保存。
int main()
{
FILE *pFile = fopen("url", "a"); // for .txt file
// write to file/read from file ... etc
fclose(pFile);
int fdUART = open("/dev/ttySAC0", O_RDWR | O_NOCTTY | O_NDELAY);
// some operations on UART port
close(fdUART);
/* Ethernet raw package process*/
/* Char dev driver open and communicate with FPGA fifo */
/* so on */
reboot(LINUX_REBOOT_CMD_RESTART);
}
并且正在使用 UART、以太网、char 驱动程序,只是想知道 reboot() 调用系统对我的系统的影响。
任何帮助都非常感谢。
【问题讨论】:
-
听起来您正在写入的设备不是持久的。您很可能只是在写入 tmpfs 或其他东西。这个程序的工作目录挂载了什么?
-
哦,是的..我忘了告诉我通过挂载将文件(“url”)写入 SDCard,但文件系统是 cramfs。并感谢您帮助我。
-
你写了
close(pFile)。那应该是fclose(pFile),因为它被声明为FILE *pFile。你确定这是你的实际代码吗? -
我建议调用
sync(2)和/或fsync(2)系统调用。
标签: c linux filesystems kernel