Linux Linux程序练习四

Posted 庖丁解牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux Linux程序练习四相关的知识,希望对你有一定的参考价值。

编写两个不同的可执行程序,名称分别为a和b,b为a的子进程。
在a程序中调用open函数打开a.txt文件。
在b程序不可以调用open或者fopen,只允许调用read函数来实现读取a.txt文件。
(a程序中可以使用 fork与execve函数创建子进程)。

a程序

//fork共享文件标识符
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(int arg, char * args[])
{
    pid_t child=0;
    int status;
    child=fork();
    if(child==-1)
    {
        printf("system is game over\\n");
        return -1;
    }
    //open the file in read mode
    int fd=open("a.txt",O_RDONLY);
    if(fd==-1)
    {
        printf("open the file failed ! \\n error msg:%s",strerror(errno));
        return -1;
    }
    if(child==0)
    {
        char buf[10]={0};
        sprintf(buf,"%d",fd);
        char * argv[]={"../2/tec",buf,NULL};
        execve("../2/tec",argv,NULL);
    }else
    {
        //父进程中关闭文件描述符
        close(fd);
        printf("i am parent, i am wait!\\n");
        wait(&status);
        printf("child msg is:%d\\n",WEXITSTATUS(status));
        printf("parent is end!\\n");
    }
    return 0;
}

 

 

b程序

//execve共享文件标识符
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main(int arg, char * args[])
{
    if(arg<2)
    {
        printf("请输入一个参数!\\n");
        return -1;
    }
    int fd=atoi(args[1]);
    if(fd<3)
    {
        printf("缺少文件标识符!\\n");
        return -1;
    }
    //read the file
    char buf[50]={0};
    read(fd,buf,sizeof(buf));
    printf("the message is:%s\\n",buf);
    //关闭文件描述符
    close(fd);
    return 2;
}

 

 

以上是关于Linux Linux程序练习四的主要内容,如果未能解决你的问题,请参考以下文章

实验四代码评审

验证码逆向专栏极验三代四代点选类验证码逆向分析

验证码逆向专栏某验四代文字点选验证码逆向分析

验证码逆向专栏某验四代消消乐验证码逆向分析

Linux Linux程序练习七

Linux Linux程序练习四