Я сейчас нахожусь в процессе создания Клиента и Сервера в среде Unix / Windows, но сейчас я просто работаю на стороне Unix. Одна из функций, которую мы должны создать для программы, похожа на функцию списка в Unix, которая показывает все файлы в директории, но мы также должны показать дополнительную информацию о файле, такую как его владелец и дата создания. Прямо сейчас я могу получить всю эту информацию и распечатать ее клиенту, однако мы должны также добавить, что после того, как программа напечатает 40 строк, она ждет, пока клиент нажмет любую клавишу, прежде чем продолжить печать.
Мне нужна программа, чтобы сделать это, но это приведет к тому, что мой клиент и сервер выйдут из синхронизации или, по крайней мере, выйдет из синхронизации. Это означает, что если я ввожу команду «asdad», она должна напечатать недопустимую команду, но не напечатает это сообщение, пока не введу другую команду. Я добавил свой список функций кода ниже. Я открыт для предложений о том, как выполнить это требование, поскольку выбранный мною метод, похоже, не работает.
Заранее спасибо.
Сервер - Fork Function: вызывается при вводе команды list. например,
fork_request(newsockfd, "list", buf);
int fork_request(int fd, char req[], char buf[])
{
#ifndef WIN
int pid = fork();
if (pid ==-1)
{
printf("Failed To Fork...\n");
return-1;
}
if (pid !=0)
{
wait(NULL);
return 10;
}
dup2(fd,1); //redirect standard output to the clients std output.
close(fd); //close the socket
execl(req, req, buf, NULL); //run the program
exit(1);
#else
#endif
}
Вот функция, используемая для получения всей информации о файле в директории
void longOutput(char str[])
{
char cwd[1024];
DIR *dip;
struct dirent *dit;
int total;
char temp[100];
struct stat FileAttrib;
struct tm *pTm;
int fileSize;
int lineTotal;
if(strcmp(str, "") == 0)
{
getcwd(cwd, sizeof(cwd));
}
else
{
strcpy (cwd, str);
}
if (cwd != NULL)
{
printf("\n Using Dir: %s\n", cwd);
dip = opendir(cwd);
if(dip != NULL)
{
while ((dit = readdir(dip)) != NULL)
{
printf("\n%s",dit->d_name);
stat(dit->d_name, &FileAttrib);
pTm = gmtime(&FileAttrib.st_ctime);
fileSize = FileAttrib.st_size;
printf("\nFile Size: %d Bytes", fileSize);
printf("\nFile created on: %.2i/%.2i/%.2i at %.2i:%.2i:%.2i GMT \n", (pTm->tm_mon + 1), pTm->tm_mday,(pTm->tm_year % 100),pTm->tm_hour,pTm->tm_min, pTm->tm_sec);;
lineTotal = lineTotal + 4;
if(lineTotal == 40)
{
printf("40 Lines: Waiting For Input!");
fflush(stdout);
gets(&temp);
}
}
printf("\n %d \n", lineTotal);
}
else
{
perror ("");
}
}
}
Здесь есть раздел клиента, где я проверяю это! не был найден в возвращенном сообщении. Если это так, значит, было напечатано больше строк.
if(strchr(command,'!') != NULL)
{
char temp[1000];
gets(&temp);
}
Извините за длинный пост, но если вам что-то нужно, просто спросите.