【发布时间】:2010-06-08 11:21:23
【问题描述】:
亲爱的互联网,你好,
我正在编写一个小程序,除其他外,它将接收到的所有命令写入日志文件。
为此,我想使用一个只尝试从管道读取的线程,而主线程将在任何时候写入该管道。
由于我不知道每个字符串命令的长度,所以我想到了写入和读取指向char buf[MAX_MESSAGE_LEN]的指针。
由于到目前为止我尝试过的方法不起作用,我会尽我最大的努力:P
char str[] = "hello log thread 123456789 10 11 12 13 14 15 16 17 18 19\n";
if (pipe(pipe_fd) != 0)
return -1;
pthread_t log_thread;
pthread_create(&log_thread,NULL, log_thread_start, argv[2]);
success_write = 0;
do {
write(pipe_fd[1],(void*)&str,sizeof(char*));
} while (success_write < sizeof(char*));
线程会这样做:
char buffer[MAX_MSGLEN];
int success_read;
success_read = 0;
//while(1) {
do {
success_read += read(pipe_fd[0],(void*)&buffer, sizeof(char*));
} while (success_read < sizeof(char*));
//}
printf("%s",buffer);
(对不起,如果这不缩进,我似乎无法弄清楚这个编辑器......)
哦,pipe_fd[2] 是一个全局参数。
因此,任何对此的帮助,无论是我想到的方式,还是我可以在不知道长度的情况下读取字符串的另一种方式,将不胜感激。
附带说明,我正在使用 Eclipse IDE C/C++,版本 1.2.1,我似乎无法设置编译器,因此它将 pthread 库链接到我的项目。我已经求助于编写自己的 Makefile 来使它(双关语:P)工作。有人知道如何解决链接问题吗?我在网上查看过,但我发现的所有解决方案都可能在旧版本上很好,因为选项卡和选项键不同。
无论如何,感谢一大堆互联网! 与那丹
【问题讨论】:
-
修正了缩进,使用代码按钮同时突出显示较大的代码块。 `` 语法用于内联代码。