QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: hobby!

Linux下的C编程程序源代码

[复制链接]
 楼主| 发表于 2004-11-22 12:17:28 | 显示全部楼层
#include <sys/types.h>

#include <stdio.h>

#include <unistd.h>



int main(void)

{

            pid_t pid;

            if((pid=vfork())<0)

        {

                    printf("fork error! \n");

                    exit(1);

        }

        else if(pid==0)

        {

                    printf("Child process PID: %d.\n",getpid());

                    setenv("PS1", "CHILD\\$", 1);

                printf("Process%4d: calling exec.\n",getpid());

                if(execl("/bin/sh", "/bin/sh", "arg2", NULL)<0)

                {

                            printf("Process%4d: execle error!\n",getpid());

                            exit(0);

                }

                printf("Process%4d: You should never see this because the child is already gone. \n",

                        getpid());

                    printf("Precess%4d: The child process is exiting.");

        }

        else

        {

                    printf("Parent process PID:%4d.\n", getpid());

                    printf("Process%4d: The parent has fork process %d.\n", pid);

                    printf("Process%4d: The child has called exec or has exited.\n", getpid());

        }

        return 0;

}
回复

使用道具 举报

 楼主| 发表于 2004-11-22 12:18:16 | 显示全部楼层
#include <sys/types.h>

#include <sys/wait.h>

#include <stdio.h>



void h_exit(int status);



int main(void)

{

            pid_t pid;

            int status;



            if((pid=fork())<0)

            {

                printf("fork error!\n");

                exit(0);

            }

            else if(pid==0)

                exit(7);

            if(wait(&status)!=pid)

            {

                printf("wait error!\n");

                exit(0);

            }

            h_exit(status);



            if((pid=fork())<0)

            {

                printf("fork error!\n");

                exit(0);

            }

            else if(pid==0)

                exit(1);

            if(wait(&status)!=pid)

            {

                printf("wait error!\n");

                exit(0);

            }

            h_exit(status);



            if((pid=fork())<0)

            {

                printf("fork error!\n");

                exit(0);

            }

            else if(pid==0)

        

            if(wait(&status)!=pid)

            {

                printf("wait error!\n");

                exit(0);

            }

            h_exit(status);



            exit(0);

}





void h_exit(int status)

{

            if(WIFEXITED(status))

                printf("normal termination, exit status=%d .\n", WEXITSTATUS(status));

            else if(WIFSIGNALED(status))

                printf("abnormal termination, exit status=%d. \n", WTERMSIG(status));

}
回复

使用道具 举报

 楼主| 发表于 2004-11-22 12:20:51 | 显示全部楼层
#include <sys/types.h>

#include <sys/wait.h>

#include <sys/resource.h>

#include <stdio.h>

#include <unistd.h>

#include <stdarg.h>

#include <unistd.h>

#include <stdlib.h>



void waitchildren(int signum);

void h_exit(int status);



int main(void)

{

            pid_t pid;

            int status;



            if((pid=fork())<0)

            {

                printf("fork error!\n");

                exit(0);

            }

            else if(pid==0)

            {

                printf("Hello from the child process%4d!\n", getpid());

                setenv("PS1", "CHILD \ \ $", 1);

                printf("Process%4d: I’m calling exec. \n", getpid());

                execl("/bin/sh", "/bin/sh", NULL);

                printf("Process%4d: You should never see this because the child is already gone.\n", getpid());

            }

            else if(pid!=-1)

            {

                printf("Hello from the parent process%4d!\n", getpid());

                printf("Process%4d: The parent has forked process %d. \n", getpid(),pid);

                printf("Process%4d: The parent is waiting for the child to exit.\n", getpid());

                wait4(pid, &status, 0, NULL);

                h_exit(status);

            }



        return 0;

}





void h_exit(int status)

{

            if(WIFEXITED(status))

                printf("normal termination, exit status=%d .\n", WEXITSTATUS(status));

            else if(WIFSIGNALED(status))

                printf("abnormal termination, exit status=%d. \n", WTERMSIG(status));

}
回复

使用道具 举报

 楼主| 发表于 2004-11-22 12:21:31 | 显示全部楼层
#include <sys/types.h>

#include <stdio.h>

#include <unistd.h>



void forkerror(void);

void execerror(void);



int main(void)

{

            pid_t pid;

            if((pid=vfork())<0)

        {

                    atexit(forkerror);

        }

        else if(pid==0)

        {

                    printf("Child process PID: %d.\n",getpid());

                    setenv("PS1", "CHILD\\$", 1);

                printf("Process%4d: calling exec.\n",getpid());

                if(execl("/bin/sh", "/bin/sh", "arg2", NULL)<0)

                {

                            atexit(execerror);

                }

                printf("Process%4d: You should never see this because the child is already gone. \n",

                        getpid());

                    printf("Precess%4d: The child process is exiting.");

        }

        else

        {

                    printf("Parent process PID:%4d.\n", getpid());

                   printf("Process%4d: The parent has fork process %d.\n", pid);

                    printf("Process%4d: The child has called exec or has exited.\n", getpid());

        }

        return 0;

}





void forkerror(void)

{

            printf("fork error!\n");

            exit(1);

}





void execerror(void)

{

            printf("exec error!\n");

            exit(1);

}
回复

使用道具 举报

 楼主| 发表于 2004-11-22 12:23:08 | 显示全部楼层
#include <sys/types.h>

#include <stdio.h>

#include <unistd.h>



void forkerror(void);

void execerror(void);



int main(void)

{

            pid_t pid;

            if((pid=vfork())<0)

        {

                    atexit(forkerror);

        }

        else if(pid==0)

        {

                    printf("Child process PID: %d.\n",getpid());

                    setenv("PS1", "CHILD\\$", 1);

                printf("Process%4d: calling exec.\n",getpid());

                if(execl("/bin/sh", "/bin/sh", "arg2", NULL)<0)

                {

                            atexit(execerror);

                }

                printf("Process%4d: You should never see this because the child is already gone. \n",

                        getpid());

                    printf("Precess%4d: The child process is exiting.");

        }

        else

        {

                    printf("Parent process PID:%4d.\n", getpid());

                   printf("Process%4d: The parent has fork process %d.\n", pid);

                    printf("Process%4d: The child has called exec or has exited.\n", getpid());

        }

        return 0;

}





void forkerror(void)

{

            printf("fork error!\n");

            exit(1);

}





void execerror(void)

{

            printf("exec error!\n");

            exit(1);

}
回复

使用道具 举报

 楼主| 发表于 2004-11-22 12:31:24 | 显示全部楼层
#include <sys/types.h>

#include <sys/wait.h>

#include <stdio.h>



void h_exit(int status);

static void forkerror(void);

static void waiterror(void);



int main(void)

{

            pid_t pid;

            int status;



            if((pid=fork())<0)

            {

                atexit(forkerror);

            }

            else if(pid==0)

                abort();

            if(wait(&status)!=pid)

            {

                atexit(waiterror);

            }

            h_exit(status);

       

            exit(0);

}





void h_exit(int status)

{

            if(WIFEXITED(status))

                printf("normal termination, exit status=%d .\n", WEXITSTATUS(status));

            else if(WIFSIGNALED(status))

                printf("abnormal termination, exit status=%d. \n", WTERMSIG(status));

}





void forkerror(void)

{

            printf("fork error!\n");

}





void waiterror(void)

{

            printf("wait error!\n");

}
回复

使用道具 举报

 楼主| 发表于 2004-11-22 12:38:18 | 显示全部楼层
#include <sys/types.h>

#include <sys/stat.h>

#include <stdio.h>

#include <unistd.h>

#include <stdarg.h>

#include <fcntl.h>

#include <stdlib.h>

#include <errno.h>



void enhancedperms(void);

void normalperms(void);

void tryopen(void);



int ruid, euid;



int main(void)

{

            ruid=getuid();

            euid=geteuid();

            normalperms();



            if(ruid==euid)

            {

                printf("euid%4d: Warning:this program wasn;t marked setuid in the filesystem \n", euid);

                printf("euid%4d: or you running the program ar root.\n", euid);

            }



            tryopen();

            enhancedperms();

            tryopen();

            normalperms();



            printf("euid%4d: Exiting now. \n", euid);

            return 0;

}





void enhancedperms(void)

{

            if(seteuid(euid)==-1)

            {

                printf("euid%4d: Railed to switch to enhanced permissions:%s.\n", euid, sys_errlist[errno]);

                exit(255);

            }

            else

            {

                printf("euid%4d: Switched to enhanced permissions. \n");

            }

}





void normalperms(void)

{

            if(seteuid(ruid)==-1)

            {

                printf("euid%4d: Failed to switch to normal permissions: %s. \n", euid, sys_errlist[errno]);

                exit(255);

            }

            else

            {

                printf("euid%4d: Switched to enhanced permissions. \n");

            }

}





void tryopen(void)

{

            char *filename="/etc/shadow";

            int result;



        if(result=open(filename, O_RDONLY)==-1)

        {

                    printf("euid%4d: Open failed: %s.\n", euid, sys_errlist[errno]);

        }

        else

        {

                    printf("euid%4d: Open was successful.\n", euid);

                    close(result);

        }

}
回复

使用道具 举报

发表于 2004-11-24 14:30:08 | 显示全部楼层
这是干吗呢?
回复

使用道具 举报

 楼主| 发表于 2004-11-24 22:13:25 | 显示全部楼层
这里请大家不要回贴!!!
回复

使用道具 举报

 楼主| 发表于 2004-11-24 22:13:44 | 显示全部楼层
这里请大家不要回贴!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-7 01:35 , Processed in 0.041244 second(s), 13 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表