首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >管道:写在管道的前面

管道:写在管道的前面
EN

Stack Overflow用户
提问于 2016-07-31 06:59:51
回答 1查看 48关注 0票数 1

我在“TIMM_OSAL_WriteToFrontOfPipe”和“TIMM_OSAL_WriteToPipe”中遇到了链接

TIMM_OSAL_WriteToPipe中,数据只是为了编写管道的末端。在TIMM_OSAL_WriteToFrontOfPipe中,在写入端写入数据,然后再读又写。

我试着用下面的示例程序复制相同的内容。但又不明白读写的意义。有人能给它加点光吗?

代码语言:javascript
复制
int main(void)
{
int fd[2];

int status = pipe (fd);
if (status) {
    fprintf(stderr, "** pipe create failed");
    return 0;
}

status = fork();
if (status < 0)
    fprintf (stderr, "** fork failure!");

if (status == 0){
    //close (fd[1]);
    char buf[5] = {0,};
    int ret_size;
    fprintf(stderr, "child going to sleep...\n");
    sleep (10);
    fprintf(stderr, "\nchild woken up...\n");
    ret_size = read (fd[0], buf, 5);
    fprintf (stderr, "child printing ...\n");
    fprintf (stderr, "%s\n", buf);
} else {
    char buf[5] = {0};
    int read_sz;
    int write_sz;
    //close (fd[0]);
    strcpy(buf,"1");
    write_sz = write (fd[1], buf, 1);
    strcpy(buf,"2");
    write_sz = write (fd[1], buf, 1);
    strcpy(buf,"3");
            write_sz = write (fd[1], buf, 1);
    strcpy(buf,"4");
    write_sz = write (fd[1], buf, 1);
    if (write_sz < 0)
        fprintf (stderr, "write failed");
    else
        fprintf(stderr, "written 1234\n");

    memset(buf, 0, sizeof(buf));

    strcpy(buf,"5");
    write(fd[1], buf, 1);

    memset(buf, 0, sizeof(buf));

    read_sz =  read (fd[0], buf, 5);
    if (read_sz > 0)
        fprintf(stderr, "read data :\n%s\n", buf);

    //write back to pipe
    write (fd[1], buf, 5);

}
return 0;
}

输出:

代码语言:javascript
复制
written 1234
read data :
12345
child going to sleep...
child woken up...
child printing ...
12345

我也尝试过不使用fork,在相同的过程中读和写。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-31 07:50:44

WriteToFrontOfPipe的意思是:

|----------------CURRENT_DATA| -> |------CURRENT_DATA YOUR_DATA|

因为管道的作用类似于队列,所以需要三个操作:

|------YOUR_DATA CURRENT_DATA| //写入数据

|-------------------YOUR_DATA| //读取尾将数据放在前面

|------CURRENT_DATA YOUR_DATA| //保存以前的数据

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38681577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档