在数据结构的课程设计中,为了加入些亮点,和小组的同学交流后发现可以在Linux下写的程序中利用进程、信号、还有display命令调用能在程序运行的时候打开一张图片(这张图片是新开一个窗口打开的)。
- #include <unistd.h>    /*创建进程所需要的库*/
- 
#include <signal.h>    /*调用信号函数所需要的库*/
- 
- 
void foo()
- 
{
- 
    exit(0);    
- 
}
- 
- 
- 
int main(void)
- 
{    
- 
    pid_t pid;
- 
- 
    pid = fork();    /*创建进程*/    
- 
    
- 
    signal(SIGUSR1, foo);    /*当收到SIGUSR1的信号时,执行foo函数*/    
- 
    if (0 == pid) {    /*进入子进程*/
- 
        system("display xxx");    /*xxx是你要打开的图片的图片名字,如果图片和程序没在一个目录,就输入图片的绝对路径*/
- 
    }    
- 
    sleep(2);    /*进入父进程*/
- 
    signal(SIGUSR1, SIG_IGN);    /*父进程忽略SIGUSR1信号*/
- 
    kill(0, SIGUSR1);    /*利用kill()函数发出SIGUSR1信号,父进程和子进程都会收到这个信号*/
- 
                /*父进程由于忽略这个信号,所以不会执行foo退出,而子进程接受到这个信号执行foo退出,这也意味着图片窗口关闭*/
- 
    .....
- 
- 
- 
    return 0;
- }
如果你不想让图片自动关闭,你可以不用信号,只需要用子进程调用system("display ..."); 打开图片即可.
- #include <unistd.h>
- 
- 
int main(void)
- 
{
- 
    pid_t pid;
- 
    pid = fork();
- 
    if (0 == pid) {
- system("display xxx"); /*xxx是你要打开的图片的图片名字,如果图片和程序没在一个目录,就输入图片的绝对路径*/
- 
    }
- 
    return 0;
- }
在这次数据结构课程设计中,我写的是校园导游程序。
    一开始执行程序的时,打开一张学校的地图,不关闭它,直到主程序退出,或者用户关闭。
    查询景点的信息时,选择相应的景点信息会打开相应的景点图片,执行返回上级菜单时,发出信号,关闭图片。
