[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Компьютеры » Программирование » Linux » Каналы
Каналы
АлексейДата: Суббота, 05.12.2015, 01:14 | Сообщение # 1
Продвигающийся
Группа: Администраторы
Сообщений: 324
Награды: 4
Репутация: 1
Статус: Оффлайн
Все, что связано с каналами и не относится к другими темам, будет переносится в эту тему.
Другими словами сюда будет добавляться вся основная информация по работе с каналами, а так же куски кодов, которые в дальнейшем можно использовать при написании своих программ или просто, чтобы посмотреть как это все выглядит.
 
АлексейДата: Суббота, 05.12.2015, 01:22 | Сообщение # 2
Продвигающийся
Группа: Администраторы
Сообщений: 324
Награды: 4
Репутация: 1
Статус: Оффлайн
Конвейер (англ. pipeline) в терминологии ОС UNIX — некоторое множество процессов, для которых выполнено следующее перенаправление ввода-вывода: то, что выводит на поток стандартного вывода предыдущий процесс, попадает в поток стандартного ввода следующего процесса. Запуск конвейера реализован с помощью системного вызова pipe().

Код возврата конвейера равен коду возврата последней команды.
 
АлексейДата: Суббота, 05.12.2015, 01:26 | Сообщение # 3
Продвигающийся
Группа: Администраторы
Сообщений: 324
Награды: 4
Репутация: 1
Статус: Оффлайн
Код программы
Код
int main( )
{
    int fd[2], /*nread,nread2,*/ pid;
    char buf2[SIZE];
    if(pipe(fd) == -1)
        {perror("pipe failed"); exit(1);}
    if((pid = fork()) < 0)
        {perror("fork failed"); exit(2);}
    if(pid == 0)
    { /* процесс потомок */
        close(fd[1]);
        ofstream ofile ("output.txt");
        cout <<"что-то ворочается";
        int len;
        while ((len = read(fd[0], buf2, SIZE)) != 0)
        ofile.write(buf2, len);
    }

    else
    { /* процесс родитель */
        close(fd[0]);
        ifstream ifile ("input.txt");
        stringstream stream;
        stream<<ifile.rdbuf();
        string contents(stream.str());
        const char * mystr = contents.c_str();
        write(fd[1], (void *) mystr, strlen(mystr) + 0);
        close(fd[1]);
    }
}

Библиотеки:
Код
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <time.h>
#include <string>
#include <iostream>
#include <sstream>
#include <fstream>
using namespace std;

#define SIZE 1024
 
Форум » Компьютеры » Программирование » Linux » Каналы
  • Страница 1 из 1
  • 1
Поиск: