有人可以解释一下程序中下面两行的含义来实现管道吗?
Can someone please explain the meaning of two lines below in the program to implement pipe?
需要解释作者在这里试图做什么。
为什么我不能使用一维数组而不是二维数组?
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;
}
explain the meaning of two lines below
行
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 个字符。
Why cannot I use Single dimension array instead od 2d array?
这只是将它们分组为二维数组的一种选择,您也可以使用一维数组:
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]));
发送 "Hello" 而不是再次发送 "Hi"
需要解释作者在这里试图做什么。 为什么我不能使用一维数组而不是二维数组?
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;
}
explain the meaning of two lines below
行
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 个字符。
Why cannot I use Single dimension array instead od 2d array?
这只是将它们分组为二维数组的一种选择,您也可以使用一维数组:
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]));
发送 "Hello" 而不是再次发送 "Hi"