gpt4 book ai didi

c - 从管道读取字符串不一致

转载 作者:太空宇宙 更新时间:2023-11-04 00:57:38 26 4
gpt4 key购买 nike

我从文件中读取一些数据,然后通过管道发送。当我从管道读取数据时,有时里面会有额外的字符。额外的字符也不一致,但通常是末尾的额外“R”。

我从文件中读取的数据是正确的,因为它总是应该是这样的。只是从管道读取后才遇到问题。

你能帮我找出错误吗?我已经盯着这个看了很多年了,但我找不到它。

这是给我带来麻烦的代码部分。

感谢您的帮助。

int main (int argc, char **argv) {

int nClients;
int file_name_HTML[2];

create_pipes(file_name_HTML, server_access_request);
init_free_pipes();

nClients = getHTMLFilesIntoPipe(file_name_HTML);
int clients[nClients];

for(int i=0; i < nClients; i++)
{
if((clients[i] = fork()) == 0)
{
clientFunction(file_name_HTML, server_access_request);
}
}
.....
}

int getHTMLFilesIntoPipe(int *file_name_HTML)
{
int i, n = 0;
char (*lines)[MAXCHAR] = NULL;
FILE *fp;
fp = fopen("./data/listado_html.txt", "r");

if (!fp) { /* valdiate file open for reading */
err_exit("error: file open failed.\n");
}

if (!(lines = malloc (MAXLINES * sizeof *lines))) {
err_exit("error: virtual memory exhausted 'lines'.\n");
}

while (n < MAXLINES && fgets (lines[n], MAXCHAR, fp)) /* read each line */
{
char *p = lines[n]; /* assign pointer */
for (; *p && *p != '\n'; p++) {} /* find 1st '\n' */
if (*p != '\n') /* check line read */
{
int c;
while ((c = fgetc (fp)) != '\n' && c != EOF) {} /* discard remainder of line with getchar */
}
*p = 0, n++; /* nul-termiante */
}
if (fp != stdin) fclose (fp); /* close file if not stdin */

for (int i = 0; i < n; i++)
{
write(file_name_HTML[WRITE], lines[i], strlen(lines[i]));
}

free(lines);

return n;
}

void clientFunction(int *file_name_HTML, int *server_access_request)
{
char fileName[MAXCHAR];

close(file_name_HTML[WRITE]);
//Read HTML file name
read(file_name_HTML[READ], fileName, MAXCHAR - 1);
printf("%s\n", fileName);

.......
}

预期输出:abcd1.html

abcd2.html

abcd3.html

abcd4.html

abcd5.html

当前输出:abcd1.htmlR

abcd2.htmlR

abcd3.htmlR

abcd4.htmlR

abcd5.htmlR

最佳答案

这是因为你的字符串不是 null(\0) 终止的。

当您写入不包括 null(\0) 终止符的管道时。

write(file_name_HTML[WRITE], lines[i], strlen(lines[i])+1);
^--- +1 to include null character.

strlen returns the length excluding null terminator.

关于c - 从管道读取字符串不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53923723/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com