我是靠谱客的博主 繁荣玉米,最近开发中收集的这篇文章主要介绍fcntl函数测试例子,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

jamie@jamie-laptop:~$ cat test.c
#include
#include
#include
#include

int main(void)
{
        int fd,pid;
        char buffer[20];
        fd=open("wo.txt",O_RDONLY);
        printf("%dn",fd);
        int val=fcntl(fd,F_GETFD);
        val|=FD_CLOEXEC;
        fcntl(fd,F_SETFD,val);

        pid=fork();
        if(pid==0)
        {
                //子进程中,此描述符并不关闭,仍可使用
                char child_buf[2];
                memset(child_buf,0,sizeof(child_buf) );
                ssize_t bytes = read(fd,child_buf,sizeof(child_buf)-1 );
                printf("child, bytes:%d,%snn",bytes,child_buf);

                //execl执行的程序里,此描述符被关闭,不能再使用它
                char fd_str[5];
                memset(fd_str,0,sizeof(fd_str));
                sprintf(fd_str,"%d",fd);
                int ret = execl("./exe1","exe1",fd_str,NULL);
                if(-1 == ret)
                        perror("ececl fail:");
        }       

        waitpid(pid,NULL,0);
        memset(buffer,0,sizeof(buffer) );
        ssize_t bytes = read(fd,buffer,sizeof(buffer)-1 );
        printf("parent, bytes:%d,%snn",bytes,buffer);
}

jamie@jamie-laptop:~$ cat exe1.c
#include
#include
#include
#include

int main(int argc, char **args)
{
        char buffer[20];
        int fd = atoi(args[1]);
        memset(buffer,0,sizeof(buffer) );
        ssize_t bytes = read(fd,buffer,sizeof(buffer)-1);
        if(bytes < 0)
        {
                perror("exe1: read fail:");
                return -1;
        }
        else
        {
                printf("exe1: read %d,%snn",bytes,buffer);
        }
        return 0;
}

jamie@jamie-laptop:~$ gcc -o exe1 exe1.c
jamie@jamie-laptop:~$ gcc -o test test.c
jamie@jamie-laptop:~$ cat wo.txt
this is a test
jamie@jamie-laptop:~$ ./test
3
child, bytes:1,t                               //子进程中可使用fd

exe1: read fail:: Bad file descriptor  //execl调用的程序中不能使用fd
parent, bytes:14,his is a test          //父进程中当然能使用fd

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7232789/viewspace-714221/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7232789/viewspace-714221/

最后

以上就是繁荣玉米为你收集整理的fcntl函数测试例子的全部内容,希望文章能够帮你解决fcntl函数测试例子所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部