【发布时间】:2020-07-15 21:03:03
【问题描述】:
我正在尝试编写一个简单的聊天程序。这个想法基本上很简单,两个文件包含消息,这似乎工作正常。问题出在 fork 系统调用中。接收方的文件未显示。 ChildProcess 要么过早终止,要么存在一些我不认识的其他问题。
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
char MyName[256], RecName[256];
int Over=0;
int SendMsg (char* name)
{
FILE *file;
char BufText[1000];
int n=0;
char sign;
fflush(stdin);
printf("To %s: ", name);
n=0;
do {
sign=getchar();
BufText[n++]=sign;
if(n>=998) break;
}while(sign!='\n');
BufText[n]=0;
if(BufText[0]!='\n') {
file = fopen(name,"a");
if(file!=NULL) {
fwrite(BufText, sizeof(char), strlen(BufText), file);
fflush(file);
fclose(file);
}
else return -1;
}
else {
return 0;
}
return 1;
}
int ReceiveMsg(char* name)
{
FILE *file;
char sign;
int result =0;
file=fopen(MyName,"r");
if(file) {
if(fread(&sign,sizeof(char),1,file)==1) {
result=1;
printf("From %s: ", name);
printf("%c",sign);
while(fread(&sign,sizeof(char),1,file)==1) {
printf("%c",sign);
}
file = freopen(name,"w",file);
}
fclose(file);
return result;
}
return result;
}
void ChildProcess(void)
{
int receive;
do {
receive = ReceiveMsg(MyName);
sleep(1);
}while (receive == 1);
}
void ParentProcess(void)
{
int result;
do {
result = SendMsg (RecName);
}while(result != 0);
}
int main(int argc, char* argv[])
{
pid_t pid;
if(argc>1) strcpy(MyName, argv[1]);
else {
printf("Your name ?: ");
scanf("%s",MyName);
}
if(argc>2) strcpy(RecName, argv[2]);
else {
printf("Recipient ?: ");
scanf("%s",RecName);
}
pid = fork();
if (pid == 0)
ChildProcess();
else
ParentProcess();
return 0;
}
【问题讨论】:
-
您是否进行过任何调试?例如在调试器中运行您的程序和/或添加更多调试打印语句来跟踪程序正在做什么?如果有,你发现了什么? How to debug small programs