Hello World 6

VC6.0创建hello-World程序 最近在看《数据结构》,想用C语言写个算法,想到了用VC6.0,本科期间,对C语言这门课是很自豪的,无奈时间长没 碰,一个helloWorld都写不成了。看来语言和IDE都是要经常去碰的,否则真的会生疏,闲话少叙,下面开始用VC6.0建 一个helloWorld程序。 1打开vc6.0,文件——新建 2 建立工程文件,输入工程名称,选择建立一个空工程,点击确定 3 建立源文 阅读详情

本文装载自:http://www.cnblogs.com/xuqiang/archive/2010/03/29/1953689.html

微笑

卸载hello程序

现在再来看看我们的Hello World程序:

#include <stdio.h>

int main ()
{

printf ("hello world\n");

return 0;

} 

在进程运行结束后,我们会显示的调用exit()或者return退出正在运行的进程,如果调用return的话,编译器会自己加上exit().此时,保存子进程的一

部份信息是很有必要的,因为父进程可以读取这些消息而取得子进程的退出状态.如果子进程退出.但父进程没有用wait(),这就成为了我们常说的僵

尸进程,exit()系统调用在内核中的相应接口为sys_exit(),我们来跟踪一下,看下内核是如何处理这个过程的.

 

fastcall NORET_TYPE void do_exit(long code)

{

...

//不可以在中断上下文或者是0号进程使用该函数

         if (unlikely(in_interrupt()))

                   panic("Aiee, killing interrupt handler!");

         if (unlikely(!tsk->pid))

                   panic("Attempted to kill the idle task!");

  ...

 //设置PF_EXITING:表示进程正在退出

         tsk->flags |= PF_EXITING;

 

...

 

 //退出状态码

         tsk->exit_code = code;

         taskstats_exit(tsk, group_dead);

 

         //退出进程所占用的空间

         exit_mm(tsk);

 

         if (group_dead)

                   acct_process();

         //从进程的信号从IPC队列中删除

         exit_sem(tsk);

         //

         __exit_files(tsk);

         //关闭打开的文件

         __exit_fs(tsk);

         check_stack_usage();

         exit_thread();

         cgroup_exit(tsk, 1);

         exit_keys(tsk);

 

         //进程组全部退出且当前进程是进程组的组长

         if (group_dead && tsk->signal->leader)

                   //脱离当前的tty 并向进程显示终端的组发送SIGHUP 和SIGCONT

                   disassociate_ctty(1);

 

 

         //减少模块的引用计数

         module_put(task_thread_info(tsk)->exec_domain->module);

         if (tsk->binfmt)

                   module_put(tsk->binfmt->module);

 

         proc_exit_connector(tsk);

         //更新进程的亲属关系.并给父进程发送相应的信号

         exit_notify(tsk);

 

...

 //进程退出已经完成了,设置PF_EXITPIDONE

         tsk->flags |= PF_EXITPIDONE;

 

...

//设置进程的状态为TASK_DEAD

         tsk->state = TASK_DEAD;

 

         //调度另一个进程运行

         schedule();

 

...

}

 

显然上面的函数首先做的是检查进程退出条件是否满足,然后结束和进程相关的资源,最后标记当前进程为TASK_DEAD,注意此时还没有将

task_struct删除。那么进程描述符什么时候被删除?

 

由于在linux中允许进程查询其父进程的状态,或者是任何子进程的状态,所以在某个进程执行完毕之后,不能马上将task_struct删除。只有当

父进程发出了wait系统调用之后才允许将task_struct结构从内存中删除。但是如果子进程在父进程之前结束那该怎么办?在linux中,将这样的子进程的父进程自动的设置成init进程。这时,在init进程中使用wait系统调用来结束这样的子进程。

 

 

下面参见《linux内核编程》

当子进程终止时,父进程收到内核发出的信号“SIGCHLD”,父进程可以在任何的事件地点来调用wait系统调用。可以采用:

pid_t wait(int* status)

pid_t waitpid (pid_t pid, int* status, int options)

pid_t wait3(int* status, int options, struct rusage* rusage)

pid_t wait4(pid_t pid, int* status, int options, struct rusage* rusage)

这些函数又调用sys_wait4。

asmlinkage int sys_wait4(pid_t pid,unsigned int * stat_addr, int options, struct rusage * ru){
	...
	/* 参数有效? */
	if (options & ~(WNOHANG|WUNTRACED|__WCLONE))	    return -EINVAL;	/* 将进程加入到等待进程中 */	add_wait_queue(&current->wait_chldexit,&wait);repeat:	flag=0;	/* 首先初始化flag为0,在下面如果查找到参数pid和某个子进程的pid相同,更改pid */
	/* p_cptr是进程的子进程,p_osptr是进程的子进程兄弟进程 */ 	for (p = current->p_cptr ; p ; p = p->p_osptr) {		...		flag = 1;		switch (p->state) {		/* 找到这样的进程pid等于函数参数pid */			case TASK_STOPPED:	/* TASK_STOPPED进程进入睡眠状态,此时进程是可以被唤醒的 */				if (!p->exit_code)					continue;				if (!(options & WUNTRACED) && !(p->flags & PF_PTRACED))					continue;				if (ru != NULL)					getrusage(p, RUSAGE_BOTH, ru);				if (stat_addr)					put_user((p->exit_code << 8) | 0x7f,						stat_addr);				p->exit_code = 0;				retval = p->pid;				goto end_wait4;			case TASK_ZOMBIE:		/* 进程处于TASK_ZOMBIE,此时需要收回task_struct */				current->cutime += p->utime + p->cutime;				current->cstime += p->stime + p->cstime;				if (ru != NULL)					getrusage(p, RUSAGE_BOTH, ru);				if (stat_addr)					put_user(p->exit_code, stat_addr);				retval = p->pid;				if (p->p_opptr != p->p_pptr) {					REMOVE_LINKS(p);					p->p_pptr = p->p_opptr;					SET_LINKS(p);					notify_parent(p);				} else					release(p);	/* 释放进程的内存中的结构 */			...		}	}	...end_wait4:	/* 结束函数sys_wait4 */	remove_wait_queue(&current->wait_chldexit,&wait);	return retval;}

显然在sys_wait4函数中实现了将进程的内存结构消除。

到现在为止,hello world程序最终完成了一个简单的printf ("hello world\\n");的使命,挂掉了。那么linux中程序(或者说是进程)的完整生命周期就是这样的。

终于hello world完了。。。

6 种疯狂的 Hello World 程序 C 语言写法 以下六个程序段主要完成以下工作: 输出 hello world 产生混乱的C语言源代码 下面的所有程序都可以在GCC下编译,只有最后一个程序需要使用c++编译器G+。 hello1.c #define _________ } #define ________ putchar #define _______ main #define _(a) ________(a); #def... 阅读详情

相关推荐

6 Hello World 示例

6Hello World 示例 目录 6Hello World 示例 6.1BitBake 你好世界 6.2获取BitBake 6.3搭建 BitBake 环境 6.4Hello World 示例 6.1BitBake 你好世界 通常用于演示任何新编程语言或工具的最简单示例是“Hello World”示例。本附录以教程形式演示了 BitBake 上下文中的 Hello World。本教程描述了如何创建一个新项目以及允许 BitBake 构建它所需的适用元数据文件。 ...

Jarvis的博客 475

PySide6 安装、简介 及 Hello world

PySide6 安装、简介 及 Hello world

weixin_44796285的博客 5355

VC++6.0上如何运用Hello World 小程序

一 首先打开visual C++6.0软件 我们的界面是这个样子的二 然后点击最左上角的File 点击新建 (快捷方式为Ctrl+N)我们就可以设置一下, 点击左边的Win32 Console Application,工作名称设置为 Hello World 点击确定。三 然后再一步步点击确定完成即可四 单机选中Source Files 文件夹后,使用快捷方式ctrl+n新建文件,自定义文件名称(后...

ZTR1126的博客 6207

TP6简单的Hello World

a)httpd.conf 启用 LoadModule rewrite_module modules/mod_rewrite.so (去掉前面的#)原文链接:https://blog.youkuaiyun.com/u012764444/article/details/106905916。c)在public下的.htaccess文件中(内容不用修改,默认生成的就是这样)// 禁止URL访问的应用列表(自动多应用模式有效)// 应用映射(自动多应用模式有效)// 域名绑定(自动多应用模式有效)// 应用的命名空间。

全粘工程师 190

《拯救大学生课设不挂科第二期之Windows11下安装VC6.0(VC++6.0)与跑通Hello World C语言程序教程》【官方笔记】

大学第一次学C语言的时候,大部分老师会选择VC6这个编辑器。但由于很多人是新手,第一次上大学学C语言。老师要求VC6.0(VC++6.0)写C语言跑程序可能很多人还是第一次接触电脑。

程序员象漂亮的博客 1767

STLink驱动故障全解析:从卡顿到重装的终极修复指南

本文全面解析STLink驱动故障的常见现象及解决方案,包括驱动卸载、重装、Keil环境配置等关键步骤。针对设备管理器黄色感叹号、Keil识别异常等问题,提供从软件到硬件的终极修复指南,帮助开发者高效解决STLink连接问题。

sss66的博客 734

从Visual C++ 6.0到Studio 2005入门之Hello,World!

以前一直用Visual C++ 6.0,安装简单轻巧,上手方便。我用VC6的原因很简单,这是我们的教学语言。上课就是用的这玩意教的。教授认为,这是C++的非常新的版本,和以前有很大改进。说的也是,以前不一直都用Turbo C的么?现在时代进步了,再用落后20年的东西显然不合时宜,所以大家教学都用上了只落后10年的Visual C++ 6.0。时代不同啦,Visual Studio 2005 S

WZ_Yong的专栏 3315

Arduino+NRF24L01 无线遥控舵机与无刷电机系统搭建指南

本文详细介绍了使用Arduino和NRF24L01模块搭建无线遥控系统的完整指南,涵盖舵机和无刷电机的无线控制。从硬件选型、电路连接到代码编写与调试,提供了实用技巧和常见问题解决方案,帮助DIY爱好者低成本实现稳定可靠的无线遥控应用。

sre5engineer的博客 588

从零开始实现Qt6的第一个hello world

如果需要立即投入实际项目开发,且项目要求稳定性和丰富的学习资源,Qt5.15 LTS是更安全的选择,因为目前大多数教程和社区支持仍围绕Qt 5,如果是纯粹的学习者,着眼于长期发展,Qt 6是更好的选择,因为它是Qt的未来方向,新功能更丰富,且官方正专注于实现与Qt 5的功能一致性。

具身小站 497

ADB命令解锁Android手机屏幕的3种实用方法(附详细步骤)

本文详细介绍了在Android手机屏幕失灵或密码遗忘时,利用ADB命令解锁屏幕的三种实用方法。包括通过ADB模拟输入事件、移除锁屏认证文件(需Root权限)以及结合恢复模式抢救数据。文章提供了详细的操作步骤与风险提示,强调提前开启USB调试的重要性,是Android用户应对紧急锁屏情况的有效技术指南。

weixin_29229055的博客 918

CY7C68013 C0模式启动

C0或是C2启动的目的,是更改USB芯片的ID信息,并把固件载入到芯片内部RAM中运行。C0模式是指只从EEPROM中载入USB ID信息,因为只有ID信息(8个字节),所以只需要一个小容量的EEPROM即可。当然大容量的EEPROM也可以使用C0模式,但是小容量的EEPROM只能使用C0模式启动。如下图所示: 使用小容量的EEPROM要将A0,A1,A2接地。 这里我用了个24LC01,容量1

Fezl的博客 1739

6个变态的C语言Hello World程序

下面的六个程序片段主要完成这些事情: 输出Hello, World 混乱C语言的源代码 下面的所有程序都可以在GCC下编译通过,只有最后一个需要动用C++的编译器g++才能编程通过。 hello1.c #define _________ } #define ________ putchar #define _______ main #define _(a) ________...

suxuecyuyan的博客 269

开源模型应用落地-qwen模型小试-入门篇(二)

在windows环境下,使用transformer设置模型参数/System Prompt/历史对话

以微薄之力,予他人些许温暖. 3235

6个变态的C语言写的Hello World

原文:http://cocre.com/?p=914  —— 酷壳 本文仅供朋友们“消遣作乐”,能够看懂是为什么固然不错。看不懂也不必太过认真,如果你要觉得有意思的话,顶顶贴。如果你觉得没什么意思的话,一笑了之。仅供娱乐而已,不必太过认真。  下面的六个程序片段主要完成这些事情:输出Hello, World混乱C语言的源代码(加密源代码,嘿嘿)下面的

陈皓专栏 【空谷幽兰,心如皓月】 2万+

基于DNN神经网络的多输入多输出数据回归预测(附带Matlab代码)

假设我们的输入数据包含n个特征,输出数据包含m个特征。在本文中,我们将介绍如何使用DNN(深度神经网络)实现多输入多输出数据回归预测,并提供相应的Matlab代码。需要注意的是,上述代码中的DNN模型是一个简化的示例,您可以根据实际任务的复杂程度和要求进行相应的调整和优化。综上所述,我们介绍了如何使用DNN神经网络实现多输入多输出数据回归预测,并提供了相应的Matlab代码。函数对DNN模型进行训练,其中输入数据需要转置,以适应网络的输入要求。最后,我们使用训练好的模型对测试数据进行预测,并打印预测结果。

DevWizard的博客 1067

2025年再论 SAP ABAP 系统经典的三层架构的理解

【摘要】本文基于作者19年SAP开发经验,深入解析SAP经典三层架构在S/4HANA时代的演进与实践。数据库层从多数据库支持转向HANA专属,通过SQLScript实现计算下推;应用层以ABAP平台为核心,融合OData和RAP等现代开发范式;表现层从SAP GUI过渡到Fiori Launchpad为主导。文章通过真实案例(如月末关账优化、ATP检查改造)展示三层协作如何提升性能,并探讨了本地/云/混合部署策略。全文贯穿SAP官方技术文档参考,为开发者提供体系化架构认知和实践指导。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 755

新版django1.6的Hello world

从django1.1以后,就基本没怎么用django了。结果今天写个hello world,都搞了半天。所以记录下来。 【确实是没多少营养的文,请大家不要拍砖】 下面过程,以windows平台下为例: 1,确保django正确安装。 2,建立一个新django项目(运行:python django-admin.py startproject ) 具体步骤如下: (1)打

常城的专栏 8487

AutoSAR系列讲解 - 资料下载

学习资料下载汇总

雪云飞星的博客 4万+

prjHelloWorld - Win32 Application Hello World 代码解析 - VC++6 - HackerJLY

prjHelloWorld - Win32 Application Hello World 代码解析 - VC++6 - HackerJLYprjHelloWorld.cpp// prjHelloWorld.cpp : Defines the entry point for the application.//#include "stdafx.h"#include "resource.

纪飞的博客 1421

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

6个变态的C语言Hello World程序 之 雷人的程序语言

以下的六个程序片段主要完毕这些事情: 输出Hello, World混乱C语言的源码 以下的全部程序都能够在GCC下编译通过,仅仅有最后一个须要动用C++的编译器g++才干编程通过。 hello1.c 1 2 3 4 5 6 7 8 9 10 11 #define _________ } ...

weixin_30540691的博客 2373

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

WINCE6.0中的“hello world”,7月15日

WINCE6.0中的“hello world” #include LRESULT CALLBACK myWNDPROC(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); int WinMain( HINSTANCE hInstance, //句柄 HINSTANCE hPrevInstance, LPSTR lpCmd

liuxc573的专栏 444

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

CentOS6.4(linux)下编写C程序(hello world)步骤及注意事项

程序员的开始总是从hello world开始的,这次在linux下编写c程序,也同样是从hello world开始。 我使用的是CentOS6.4。要编写c程序,gcc是必备的,emacs也是大部分人首选的。如果安装的是CentOS6.4的完整包,gcc和emacs已经带上了。 本以为是很容易就可以编写第一个hello world的,可是实际写的时候,发现代码是很快就OK了,但编译的时候遇到了

学而时习之 1万+

linux2.6驱动编程第一例:hello,world的实现

linux2.6驱动编程第一例:hello,world的实现 来源: ChinaUnix博客  日期: 2008.07.25 13:42 (共有条评论) 我要评论                                                                    《linux2.6驱动

158
上一篇: Hello World 5
下一篇: 牛B的网址
弱水三千_fllik
博客等级 码龄15年 48粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值