gpt4 book ai didi

c - 为什么在 C 中使用命名管道会产生随机字符?

转载 作者:行者123 更新时间:2023-11-30 20:20:36 24 4
gpt4 key购买 nike

我在 Linux 中使用 mkfifo 命令。这是我的代码:

#include <stdio.h>
#include <sys/types.h> // mkfifo
#include <sys/stat.h> // mkfifo
#include <fcntl.h> // O_WRONLY
#include <string.h>

int main(){
char* filename = "myf";
int res = mkfifo(filename, 0777);
pid_t x = fork();
if(x){
char buff[4];
res = open("myf", O_RDONLY);
if(res == -1){
printf("problem opening fifo\n");
}
while(read(res, buff, 4)){
printf("Father: %s\n", buff);
}
}
else{
int toFath = open (filename, O_WRONLY);
char buff [4];
strcpy(buff, "hi");
write(toFath, buff, strlen(buff));
strcpy(buff, "bye");
write(toFath, buff, strlen(buff));
close(toFath);
}
return 0;
}

但它打印:

Father:  hi@
Father: bye

我不明白为什么有这些我没有写的字符(@)。我知道 strcpy 复制带有空终止符的字符串,因此当父亲打印时它应该停在空终止符处,为什么不呢?

最佳答案

strlen(buff) 返回 3,因此 write() 将输出 buff 的前 3 个字节

关于c - 为什么在 C 中使用命名管道会产生随机字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45523278/

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