写入或读取功能始终切断除第一个字母以外的所有内容。有谁知道为什么? 我有一个父亲和一个与管道沟通的孩子。 我在写入变量之前检查了它的变量,它没有被切断。C管道通信写入/读取文本的功能切入
#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);
}
的strlen(message_father)+1大概等于到1?该字符串未初始化。你只能读一个字节。可变长度的消息不适合管道。 – user2035147 2013-05-01 23:18:28