![]() |
Здравствуйте и добро от Соединенных Штатов UNIX и Linux Форумы! Благодарим Вас за посещение и вступления нашей мирового сообщества.
|
|
Google unix.com
|
|||||||
| Форумы | Регистрация | Правила форума | Ссылки | Альбомы | ЧАВО | Список участников | Календарь | Поиск | Сегодняшние сообщения | Отметить форумы читать |
| Программирования высокого уровня Почтовые вопросы о C, C + +, Java, SQL и других языках программирования здесь. |
Подробнее UNIX и Linux Темы форума можно найти полезные
|
||||
| Нить | Резьба для начинающих | Форум | Ответы | Последнее сообщение |
| клиент-сервер и программы | JCR | Программирования высокого уровня | 8 | 04-28-2009 04:06 PM |
| Клиент / Сервер выпуск | geauxtn | AIX | 5 | 07-30-2007 08:38 AM |
| клиент / сервер | Боле | UNIX для чайников Вопросы И Ответы | 2 | 10-30-2006 02:19 AM |
| NTP-сервер и клиент NTP | bubba112557 | SUN Solaris | 1 | 05-10-2005 10:37 AM |
| Трубы и именованные каналы (FIFO) Объем буфера | Jus | Файловые системы, диски и память | 1 | 08-20-2004 10:14 AM |
![]() |
|
|
LinkBack | Резьба Инструменты | Искать в этом Thread | Оценить Thread | Режимы дисплея |
|
|
|
||||
|
клиент / сервер труб
Здесь это понятие:
клиент читает путь из стандартного ввода и записывает его на pipe1.The сервер читает этот путь от pipe1 и пытается открыть файл для reading.If сервер может открыть файл, то сервер отвечает на чтение файла и его написания к pipe2; в противном случае сервер записывает сообщение об ошибке на этой же pipe.The клиент затем считывает из pipe2 и пишет он получает на стандартный вывод Вот мой код: Код:
#include <stdio.h>
#include <string.h>
#define maxsize 1000
char buffer [maxsize];
void client(int readfd,int writefd)
{
puts("give pathname:");
gets(buffer);
write(writefd,buffer,strlen(buffer));
//sleep(10);
while((read(readfd,buffer,strlen(buffer)))>0);
printf("%s/n",buffer);
}
void server(int readfd,int writefd)
{
FILE * fp;
char line[100];
//sleep(10);
read(readfd,buffer,strlen(buffer));
fp=fopen(buffer,"r");
if(fp==NULL)
{
strcpy(buffer,"cannot oepn file");
write(writefd,buffer,strlen(buffer));
}
else
while(fgets(line,100,fp)!=NULL)
write(writefd,line,100);
}
int main()
{
int pipe1[2],pipe2[2];
int childpid;
int status;
pipe(pipe1);
pipe(pipe2);
childpid=fork();
if(childpid>0)
{
close(pipe1[0]);
close(pipe2[1]);
client(pipe2[0],pipe1[1]);
wait(&status);
exit(0);
}
else
{
close(pipe1[1]);
close(pipe2[0]);
server(pipe1[0],pipe2[1]);
exit(0);
}
}
в целом я хочу sychronize чтения и записи команд клиента и сервера, но я не знаю, как ... Если кто-то есть время, чтобы посмотреть код и дать мне несколько советов, она будет реально оценили ..... спасибо заранее .. |
|
||||
|
Wow! Вот некоторые уродливые код, который вы получили там. Вот рабочий вариант:
Код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define maxsize 1000
char buffer [maxsize];
void client(int readfd,int writefd)
{
printf ("give pathname: ");
fflush (stdout);
fgets (buffer, sizeof (buffer), stdin);
write(writefd,buffer, sizeof (buffer));
while (read(readfd,buffer,sizeof(buffer)) > 0)
printf("%s",buffer);
}
void server(int readfd,int writefd)
{
FILE * fp;
char line[1000];
read(readfd,buffer,sizeof(buffer));
if (strchr (buffer, '\n'))
*strchr(buffer, '\n') = '\0';
fp=fopen(buffer,"r");
if(fp==NULL)
{
strcpy(buffer,"cannot open file");
write(writefd,buffer,strlen(buffer));
}
else
while(fgets(line,sizeof(line),fp)!=NULL)
write(writefd,line,sizeof(line));
}
int main()
{
int pipe1[2],pipe2[2];
int childpid;
int status;
pipe(pipe1);
pipe(pipe2);
childpid=fork();
if(childpid>0)
{
close(pipe1[0]);
close(pipe2[1]);
client(pipe2[0],pipe1[1]);
wait(&status);
exit(0);
}
else
{
close(pipe1[1]);
close(pipe2[0]);
server(pipe1[0],pipe2[1]);
exit(0);
}
}
Надеюсь, что это помогает! |
|
||||
|
Благодаря ей помогал много!!
![]() Собственно, у меня есть другая проблема прямо сейчас ... Я пытаюсь сделать команду кота <filename> | WC-л Что ж, похоже, возникли проблемы в чтении последней строки из буфера Код:
//implementation of cat <filename> | wc -l
#include <stdio.h>
#include <string.h>
#define size 500
int main(int argc,char * argv[])
{
int pipe1[2];
int childpid;
FILE * fp;
char buffer[size];
int status;
int lines;
if(argc!=2)
{
printf("usage : mycat <file name>\n");
exit(1);
}
pipe(pipe1);
childpid=fork();
if(childpid>0)
{
close(pipe1[0]);
fp=fopen(argv[1],"r");
if(fp==NULL)
{
printf("Cannot open file");
exit(1);
}
while(fgets(buffer,sizeof(buffer),fp)!=NULL)
write(pipe1[1],buffer,strlen(buffer));
fclose(fp);
wait(&status);
close(pipe1[1]);
exit(0);
}
else
{
close(pipe1[1]);
lines=0;
while (read(pipe1[0],buffer,sizeof(buffer)) > 0)
lines++;
printf("%d",lines);
close(pipe1[0]);
exit(0);
}
}
|
![]() |
| Закладки |
| Резьба Инструменты | Искать в этом Thread |
| Режимы дисплея | Оценить эту ветку |
|
|