Unix Network Programming Episode 98

#include "unp.h"

int my_open(const char *, int);

int main(int argc, char **argv)
{
    int fd, n;
    char buff[BUFFSIZE];

    if(argc!=2)
        err_quit("usage: mycat <pathname>");
    
    if((fd=my_open(argv[1],O_RDONLY))<0)
        err_sys("cannot open %s", argv[1]);
    
    while((n=Read(fd, buff, BUFFSIZE))>0)
        Write(STDOUT_FILENO, buff, n);
    
    return 0;
}

mycat program: copies a file to standard output

#include "unp.h"

int my_open(const char *, int);

int my_open(const char *pathname, int mode)
{
    int fd, sockfd[2], status;
    pid_t childpid;
    char c, argsockfd[10], argmode[10];

    Socketpair(AF_LOCAL, SOCK_STREAM, 0, sockfd);

    if((childpid=Fork())==0)
    {
        Close(sockfd[0]);
        snprintf(argsockfd, sizeof(argsockfd),"%d", sockfd[1]);
        snprintf(argmode, sizeof(argmode), "%d", mode);
        execl("./openfile", "openfile", argsockfd, pathname, argmode, (char *)NULL);
        err_sys("execl error");
    }

    Close(sockfd[1]);

    Waitpid(childpid, &status, 0);
    if(WIFEXITED(status)==0)
        err_quit("child did not terminate");
    if((status=WEXITSTATUS(status))==0)
        Read_fd(sockfd[0], &c, 1, &fd);
    else
    {
        errno=status;
        fd=-1;
    }

    Close(sockfd[0]);
    
    return fd;
}

my_open function: opens a file and returns a descriptor

在这里插入代码片

read_fd function: receives data and a descriptor

相关推荐
IT枫斗者1 小时前
如何解决Java EasyExcel 导出报内存溢出
java·服务器·开发语言·网络·分布式·物联网
air_7291 小时前
实验四:构建园区网(OSPF 动态路由)
服务器·网络·智能路由器
IDC02_FEIYA2 小时前
Discuz论坛网站管理员的默认用户名admin怎么修改啊?
服务器·web
勤奋的小王同学~2 小时前
(计算机网络)期末
服务器·网络·计算机网络
世纪天龙2 小时前
如何选择服务器
运维·服务器
Wang's Blog3 小时前
Linux: 任务的定时与延期
linux·服务器
熬了夜的程序员3 小时前
Linux 下的 AWK 命令详细指南与示例
linux·运维·服务器
全栈小53 小时前
【PHP】部署和发布PHP网站到IIS服务器
服务器·开发语言·php
weixin_442643424 小时前
数据跨网传输无忧:FileLink打造内外网文件传输的安全桥梁
服务器·网络·安全·filelink内外网文件传输
命里有定数4 小时前
Ubuntu问题 -- 通过远程修改文件配置ubuntu服务器的静态IP (不需要到服务器现场) (通过NetworkManager)
运维·服务器·tcp/ip·ubuntu·网卡