linux 多线程 读写操作demo
时间: 2023-07-04 21:27:26 浏览: 127
以下是一个基于多线程的读写操作的Demo,该程序启动了两个线程,一个线程用于读取标准输入,另一个线程用于将读取到的数据写入文件中。
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define MAX_BUF_SIZE 1024
char buf[MAX_BUF_SIZE];
int buf_pos = 0;
void *read_thread(void *arg) {
while (1) {
char ch = getchar();
if (ch == '\n') {
buf[buf_pos++] = '\0';
buf_pos = 0;
} else {
buf[buf_pos++] = ch;
}
}
}
void *write_thread(void *arg) {
FILE *fp = fopen("output.txt", "w");
while (1) {
if (buf_pos > 0) {
fprintf(fp, "%s\n", buf);
fflush(fp);
buf_pos = 0;
}
}
fclose(fp);
}
int main() {
pthread_t t1, t2;
pthread_create(&t1, NULL, read_thread, NULL);
pthread_create(&t2, NULL, write_thread, NULL);
pthread_join(t1, NULL);
pthread_join(t2, NULL);
return 0;
}
```
以上程序启动了两个线程,一个线程用于读取标准输入,另一个线程用于将读取到的数据写入文件中。其中,read_thread函数中使用getchar函数读取标准输入,并将读取到的数据存储在buf数组中;write_thread函数中则将buf数组中的数据写入到文件output.txt中。在主线程中,使用pthread_create函数创建两个线程,使用pthread_join函数等待两个线程的结束。注意,在使用pthread_create函数创建线程时,需要指定线程函数的类型为void *(*)(void *),表示函数返回值为void *,参数为void *。
阅读全文