/****************程序环境 信号处理 实例tmp0.c ********************/
#include "stdio.h"
#include "stdlib.h"
#include "signal.h"
void mysigint(int no) /* 自定义SIGINT信号处理 */
{
printf("User's Interrupt %d-Signal calls./n",no);
sleep(1);
exit(1);
}
int main(int argc,char *argv[],char **env)
{
int i=0;
signal(SIGFPE,mysigint); /* 自定义函数注册 */
signal(SIGINT,mysigint);
system("command"); /* DOS shell 调用 */
puts(" ^^^^ This is Child Process 0 ^^^^");
while (environ[i]) /* 运行时环境变量 同于env*/
printf("%s/n",environ[i++]);
getch();
return 0;
}
/************ 父/子进程 调用&环境测试 实例tmp1.c ******************/
#include "stdio.h"
#include "stdlib.h"
#include "signal.h"
#include "process.h"
void mysigfpe(int no)
{
printf("Parent Process Receive User's %d:SigFpe./n",no);
sleep(1);
exit(1);
}
int main(void)
{
char* argv[]={"","*a *b",0};
char* envp[]={"treeid=child","myname=stoness0",0};
int chk=-10;
int i=0;
signal(SIGFPE,mysigfpe);
puts(" ^^^^ This is Parent Process 1 ^^^^");
putenv("treeid=parent"); /* 设置父进程环境变量 */
while (environ[i]) puts(environ[i++])
;
chk=spawnl(P_WAIT,"Tmp6.exe",argv[0],argv[1],NULL); /* 调用子进程 相当于fork();*/
printf("Spawn Tmp6 Return %d./n",chk); /* 返回值 */
sleep(1);
execve("tmp0.exe",argv,envp); /* 覆盖调用 */
puts("!!Error!! Cannot execute!!/n");
getch();
return 0;
}
/*************** 底层文件操作 实例tmp6.c ******************/
#include "stdio.h"
#include "stdlib.h"
#include "dos.h"
#include "dir.h"
#include "io.h"
#include
int mybrk(void)
{
puts("User's ^break!");
sleep(1);
return 1;
}
int main(int argc, char* argv[])
{
int i=0,chk=-10,handler=0;
char tmp[100]="tmp2.txt";
struct ffblk ff1;
ctrlbrk(mybrk);
puts(" >>>> Tmp6 Child Process <<<<");
while (i!=-1)
delay(100);
/* ... */
return 0;
}