C 使用两个线程从标准输入读取数据
我试图使用两个线程从标准输入(stdin)读取数据,但无法正确读取数据。我尝试在Linux平台上使用gcc编译器。我正在尝试使用cat命令和管道读取数据C 使用两个线程从标准输入读取数据,c,multithreading,gcc,pipe,cat,C,Multithreading,Gcc,Pipe,Cat,我试图使用两个线程从标准输入(stdin)读取数据,但无法正确读取数据。我尝试在Linux平台上使用gcc编译器。我正在尝试使用cat命令和管道读取数据 cat Test.txt | ./a.out 我得到如下输出: 我做错了什么 #include <pthread.h> #include <stdio.h> #include <string.h> #include <unistd.h> // Declaring mutex pthread_
cat Test.txt | ./a.out
我得到如下输出:
我做错了什么
#include <pthread.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
// Declaring mutex
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
void *input(void *ptr)
{
while(1)
{
char str[20];
memset(str, '\0', 20);
int result;
pthread_mutex_lock(&lock);
result = read(STDIN_FILENO, str, sizeof str);
if (result <= 0)
{
printf("====\n");
pthread_exit(NULL);
return NULL;
}
pthread_mutex_unlock(&lock);
printf("Reader: %s\n", str);
}
}
int main()
{
pthread_t t1, t2;
pthread_create(&t1, NULL, input, NULL);
pthread_create(&t2, NULL, input, NULL);
pthread_join(t1, NULL);
pthread_join(t2, NULL);
return 0;
}
%s
printf
格式说明符需要以null结尾的字符串。您正在向它传递一个不以null结尾的字符串。这会导致未定义的行为
我建议你换线
result=read(标准文件号、str、sizeof str)代码>
致:
result=read(标准文件号,str,str-1的大小)代码>
另外,在调用pthread_exit
之前,应该解锁互斥锁,否则可能会出现死锁
与在整个数组上使用memset
不同,添加行会更有效
str[result]='\0'代码>
就在printf语句之前。%s
需要以NUL结尾的字符串。请将文本输出显示为文本,而不是整个桌面的屏幕截图。
AAAAAAABBBCCCDDDDDDEFG
mmmmmmmmmmgggggggggwwwghgmaaaaabbb
rrrrrrrssghgmtttttddddrrr
a