免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: lcd
打印 上一主题 下一主题

[函数] linux下用C函数如何关闭系统? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2004-07-18 09:25 |只看该作者

linux下用C函数如何关闭系统?

[quote]原帖由 "kj501"]你最好自己写个程序来试验一下,别忘了把结果告诉我们。[/quote 发表:


很遗憾,reboot(LINUX_REBOOT_CMD_HALT)除了打印一行“system halt”外,似乎没做任何事。reboot(LINUX_REBOOT_CMD_POWER_OFF)是简单的关闭电源,之前不做任何善后处理(包括关闭服务,umount文件系统等),需要自己在运行POWER_OFF之前先自行处理好善后工作。

论坛徽章:
0
12 [报告]
发表于 2004-07-18 10:33 |只看该作者

linux下用C函数如何关闭系统?

from man 2 reboot

       The precise effect of the above actions depends  on  the  architecture.
       For the i386 architecture, the additional argument does not do anything
       at present (2.1.122), but the type of reboot can be determined by  ker-
       nel  command  line  arguments (`reboot=...') to be either warm or cold,
       and either hard or through the BIOS.

论坛徽章:
0
13 [报告]
发表于 2004-07-18 15:50 |只看该作者

linux下用C函数如何关闭系统?

刚好看过 wxWindows 源代码,如下,通过 system( "init level" ) 实现关机

  1. // Shutdown or reboot the PC
  2. bool wxShutdown(wxShutdownFlags wFlags)
  3. {
  4.     wxChar level;
  5.     switch ( wFlags )
  6.     {
  7.         case wxSHUTDOWN_POWEROFF:
  8.             level = _T('0');
  9.             break;

  10.         case wxSHUTDOWN_REBOOT:
  11.             level = _T('6');
  12.             break;

  13.         default:
  14.             wxFAIL_MSG( _T("unknown wxShutdown() flag") );
  15.             return FALSE;
  16.     }

  17.     return system(wxString::Format(_T("init %c"), level).mb_str()) == 0;
  18. }
复制代码

论坛徽章:
0
14 [报告]
发表于 2004-07-18 17:28 |只看该作者

linux下用C函数如何关闭系统?

this is equal to  system("init x";
it depends on run level.

论坛徽章:
0
15 [报告]
发表于 2004-07-19 07:46 |只看该作者

linux下用C函数如何关闭系统?

有些系统的SHUTDOWN 是个SHELL, 关机或重启就是通过调用 init x实现.

例如 shutdown -y -g0 -i6 就是立即重启的意思, i6 代表初始 6 级别.

通过 runlevel 或 who -r 可查看系统当前运行级别.

具体运行级别定义可以通过 man init 来获取帮助.

论坛徽章:
0
16 [报告]
发表于 2004-07-19 09:26 |只看该作者

linux下用C函数如何关闭系统?

原帖由 "lcd" 发表:


很遗憾,reboot(LINUX_REBOOT_CMD_HALT)除了打印一行“system halt”外,似乎没做任何事。reboot(LINUX_REBOOT_CMD_POWER_OFF)是简单的关闭电源,之前不做任何善后处理(包括关闭服务,umount文件系统等),需要自?.........

既然是用嵌入式系统,通常都是用的SDRAM,掉电什么都没了,要不要做你说的善后处理好像没什么必要,最多是说将一些配置保存罢了。

论坛徽章:
0
17 [报告]
发表于 2004-07-19 12:51 |只看该作者

linux下用C函数如何关闭系统?

原帖由 "flag" 发表:

既然是用嵌入式系统,通常都是用的SDRAM,掉电什么都没了,要不要做你说的善后处理好像没什么必要,最多是说将一些配置保存罢了。


还是要umount 根文件系统的

论坛徽章:
0
18 [报告]
发表于 2004-07-19 13:29 |只看该作者

linux下用C函数如何关闭系统?

原帖由 "lcd" 发表:


还是要umount 根文件系统的

I think you'd better remount your root as read only instead of simply umount it.

论坛徽章:
0
19 [报告]
发表于 2004-07-19 13:33 |只看该作者

linux下用C函数如何关闭系统?

原帖由 "kj501" 发表:

标准库不可能提供这种函数,开机关机都是和硬件有关的,在不同的架构上有不同的实现,不可能在实现上做到标准化。

如果你说的是C语言的标准运行库,那还有点道理。
但是他在特定环境下写程序,总有SDK的,SDK可能里面会有适当的函数的。

论坛徽章:
0
20 [报告]
发表于 2004-07-19 17:35 |只看该作者

linux下用C函数如何关闭系统?

原帖由 "JohnBull" 发表:

I think you'd better remount your root as read only instead of simply umount it.

确实是这样,我只是举个例子。
事实上,我的根文件系统分区就是mount成 ro模式,用ramdisk做/tmp和/var 。但还有个数据分区,这是需要读和写的,没办法
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP