首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C管道传递文本的写/读函数切分

C管道传递文本的写/读函数切分
EN

Stack Overflow用户
提问于 2013-05-02 07:11:22
回答 1查看 710关注 0票数 0

write或read函数总是剪切除第一个字母以外的所有内容。有人知道为什么吗?我有一个父亲和一个孩子,他们用管子交流。我在写入之前检查了这个变量,但它并没有被删除。

代码语言:javascript
复制
#include<dirent.h>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<time.h>

int main(int argc, char *argv[])
{
    time_t tm_now;
    struct tm *ptm_now;
    time(&tm_now);
    ptm_now = localtime(&tm_now);

    int chanal_father[2];
    int chanal_child[2];
    pipe(chanal_father);
    pipe(chanal_child);
    char message_child[50];
    char message_father[50];
    char message_return[50];


    if (fork()==0)
    {
        read(chanal_father[0], message_father, strlen(message_father)+1);
        if(strcmp(message_father, "day") == 0) {
            int day = ptm_now->tm_mday;
            int month = (ptm_now->tm_mon)+1;
            int year = (ptm_now->tm_year)-1900;         
            sprintf(message_return, "%2d.%2d.%2d", day, month, year);
        }
        else {
            sprintf(message_return, "unknown function!");
        }

        write(chanal_child[1],message_return, strlen(message_return)+1);
        exit(0);
    }

    write(chanal_father[1], argv[1], strlen(argv[1])+1);
    read(chanal_child[0], message_child, strlen(message_child)+1);
    printf("%s\n", message_child);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-02 07:24:31

不要使用strlen()来获取数组的大小,请使用sizeof()。记住read()将读取'count‘个字节:

代码语言:javascript
复制
ssize_t read(int fd, void *buf, size_t count);

此外,为了清楚起见,您可能希望按如下方式组织程序:

代码语言:javascript
复制
pid_t pid = fork();

if(pid == 0){

   ...

}else{

   ...

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

https://stackoverflow.com/questions/16327884

复制
相关文章

相似问题

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