Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2011, 12:53   #1
5ive
Новичок
Джуниор
 
Регистрация: 27.08.2011
Сообщений: 2
По умолчанию пайпы и процессы, Linux

Здравствуйте! Набрал код с одного известного сайта с материалами по С++. Компилируется (правда, пришлось добавить инклудов ещё.), запускается, но...
Вот код для начала:
Код:
#include <cstdio>
#include <cstdlib>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>

int main(int argc, char *argv[])
{
	int fd[2], nbytes;
	char string[] = "Hail Satan!\n";
	char readbuffer[80];
	pid_t childpid;

	if((childpid = fork()) == -1)
	{
		perror("fork");
		exit(1);
	}
	if(childpid == 0)
	{
		//child process closes the input
		close(fd[0]);
		write(fd[1], string, strlen(string));
		exit(0);
	}
	else
	{
		//parent process closes the output
		close(fd[1]);
		nbytes = read(fd[0], readbuffer, sizeof(readbuffer));
		printf("Received string: %s", readbuffer);
	}
	return(0);
}
Вобщем, один процесс должен отправить сообщение через пайп, а другой - принять.
Но переменная readbuffer пуста.
5ive вне форума Ответить с цитированием
Старый 27.08.2011, 13:07   #2
5ive
Новичок
Джуниор
 
Регистрация: 27.08.2011
Сообщений: 2
По умолчанию

Дико извиняюсь, я забыл вызвать сам пайп *facepalm* ((
Теперь строка передаётся, но при этом вот какая лажа происходит:
Цитата:
alex@home-pc:~/programming/p1$ make
g++ -o main main.cpp
alex@home-pc:~/programming/p1$ ./main
Received string: Hail Satan!
�alex@home-pc:~/programming/p1$
alex@home-pc:~/programming/p1$ ./main
Received string: Hail Satan!
�alex@home-pc:~/programming/p1$
А именно, вот это: "�"
Откуда оно и что это такое?
5ive вне форума Ответить с цитированием
Старый 27.08.2011, 21:18   #3
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

write(fd[1], string, strlen(string) + 1);
Нулевой байт в конце не передали.
Carbon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процессы ]tach[ Помощь студентам 0 02.06.2011 19:58
c++ в Linux (Межпроцессорный обмен в Linux) RusLotus Помощь студентам 0 13.10.2009 16:59
Процессы Bat{CMD}_Men Win Api 5 03.10.2009 12:27
Linux на VMware....... WinXP <-> Linux DMUTPUU Операционные системы общие вопросы 1 24.09.2008 12:03