繁体   English   中英

有人可以在程序中解释下面两行的含义来实现管道吗?

[英]Can someone please explain the meaning of two lines below in the program to implement pipe?

需要解释作者在这里尝试做什么。 为什么我不能使用单维数组而不是od 2d数组?

char writemessages[2][20]={"Hi", "Hello"};
char readmessage[20];

程序片段:

   int main() {
   int pipefds[2];
   int returnstatus;
   char writemessages[2][20]={"Hi", "Hello"}; //why can't i use singlr char array
   char readmessage[20];
   returnstatus = pipe(pipefds);

   if (returnstatus == -1) {
      printf("Unable to create pipe\n");
      return 1;
   }

   printf("Writing to pipe - Message 1 is %s\n", writemessages[0]);
   write(pipefds[1], writemessages[0], sizeof(writemessages[0]));
   read(pipefds[0], readmessage, sizeof(readmessage));
   printf("Reading from pipe – Message 1 is %s\n", readmessage);
   printf("Writing to pipe - Message 2 is %s\n", writemessages[0]);
   write(pipefds[1], writemessages[1], sizeof(writemessages[0]));
   read(pipefds[0], readmessage, sizeof(readmessage));
   printf("Reading from pipe – Message 2 is %s\n", readmessage);
   return 0;
}

解释下面两行的含义

这条线

char writemessages[2][20]={"Hi", "Hello"};

定义一个包含2行20列的字符数组并初始化它,因为结束字符串的空字符数组可以包含2个字符串,最多包含19个字符,不包括空字符。

初始化使得所述第一串是'H' 'i'然后空字符,以及第二'H' 'e' 'l' 'l' 'o'然后空炭

这是一个相当于的简短方法:

char writemessages[2][20]={ { 'H', 'i', 0 }, { 'H', 'e', 'l', 'l', 'o', 0 }};

要么

char writemessages[2][20]= {
   { 'H', 'i', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
   { 'H', 'e', 'l', 'l', 'o', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};

这条线

char readmessage[20];

定义一个大小为20的数组,因此允许最多19个字符的空字符。

为什么我不能使用单维数组而不是od 2d数组?

这只是将它们分组为二维数组的一种选择,您也可以使用单维数组:

 char writemessage1[20] = "Hi";
 char writemessage1[20] = "Hello";

 printf("Writing to pipe - Message 1 is %s\n", writemessage1);
 write(pipefds[1], writemessage1, sizeof(writemessage1));
 ...
 printf("Writing to pipe - Message 2 is %s\n", writemessage2);
 write(pipefds[1], writemessage2, sizeof(writemessage2));

请注意,代码始终发送20个字符,更改定义

 char writemessage1[] = "Hi";
 char writemessage1[] = "Hello";

write(pipefds[1], writemessage1, sizeof(writemessage1)); 发送3个字符并write(pipefds[1], writemessage2, sizeof(writemessage2)); 由于数组的大小而发送6个字符(它们自动调整大小并初始化为包含结束的空字符)


大概

 printf("Writing to pipe - Message 2 is %s\\n", writemessages[0]); write(pipefds[1], writemessages[1], sizeof(writemessages[0])); 

一定是

 printf("Writing to pipe - Message 2 is %s\\n", writemessages[1]); write(pipefds[1], writemessages[1], sizeof(writemessages[1])); 

发送“你好”而不是“嗨”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM