LINUX.ORG.RU

Сообщения Hunter_nub

 

Послать сообщение всем активным пользователям

Форум — Development

Подскажите команду , при помощи которого можно посылать всем активным пользователям сообщение (сообщение нах-ся в файле)

Hunter_nub
()

задача с не сколькоми процессами

Форум — Development

Задана строка С содержащая не менее двух слов и символ 'c'. Составить новую стоку С1 из слов строки С в которых есть символ с и строку С2 из слов строки С в которых нет символа с . Для решения использовать столько процессов сколько слов в процессе

Программу я сделал , только вот без этой части: Для решения использовать столько процессов сколько слов в процессе

#include "stdafx.h"
#include "iostream"
#include <string>
using namespace std;
#include <cstring> 
int main()
{
		string s1=" ";
	setlocale(LC_ALL,"Rus");
    char string[200];

	int s=0;

    cout << "Введите строку:\n";
    cin.getline(string,200);
    char * pch = strtok (string," "),  // получаем первое слово
         * word = 0;
    int maxLen = 0; 
  cout<<endl<<"Строка с символом с   ";
      while (pch != NULL)                         // пока есть слова
      {
		     for(int i=0; i<strlen(pch);i++)
			  {
			 if(pch[i]=='c')
			 s=+1;
			 }
			 if(s>0)
				 { 
		     cout<<pch<<" ";
			 s=0;
			 }
		  else s1=s1+" "+pch;
          pch = strtok (NULL, " "); // получаем следующее слово
      }
 
	  cout<<endl<<"Строка без символа с  ";

	  cout<<s1<<endl;
 system("pause");
    return 0;
}

может кто помочь сделать вот с этой частью: Для решения использовать столько процессов сколько слов в процессе

Hunter_nub
()

Пример программы UDP-сервера

Форум — Development
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
    int sockfd; /* Дескриптор сокета */
    int clilen, n; /* Переменные для различных длин 
        и количества символов */
    char line[1000]; /* Массив для принятой и 
        отсылаемой строки */
    struct sockaddr_in servaddr, cliaddr; /* Структуры 
        для адресов сервера и клиента */
    /* Заполняем структуру для адреса сервера: семейство
    протоколов TCP/IP, сетевой интерфейс – любой, номер порта 
    51000. Поскольку в структуре содержится дополнительное не
    нужное нам поле, которое должно быть нулевым, перед 
    заполнением обнуляем ее всю */
    bzero(&servaddr, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(51000);
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    /* Создаем UDP сокет */
    if((sockfd = socket(PF_INET, SOCK_DGRAM, 0)) < 0){
        perror(NULL); /* Печатаем сообщение об ошибке */
        exit(1);
    }
    /* Настраиваем адрес сокета */
    if(bind(sockfd, (struct sockaddr *) &servaddr, 
    sizeof(servaddr)) < 0){
        perror(NULL);
        close(sockfd);
        exit(1);
    }
    while(1) {
        /* Основной цикл обслуживания*/
        /* В переменную clilen заносим максимальную длину
        для ожидаемого адреса клиента */
        clilen = sizeof(cliaddr);
        /* Ожидаем прихода запроса от клиента и читаем его. 
        Максимальная допустимая длина датаграммы – 999 
        символов, адрес отправителя помещаем в структуру 
        cliaddr, его реальная длина будет занесена в 
        переменную clilen */
        if((n = recvfrom(sockfd, line, 999, 0,(struct sockaddr *) &cliaddr, &clilen)) < 0){
            perror(NULL);
            close(sockfd);
            exit(1);
        }
        /* Печатаем принятый текст на экране */
        printf("%s\n", line);
        /* Принятый текст отправляем обратно по адресу 
        отправителя */
        if(sendto(sockfd, line, strlen(line), 0,(struct sockaddr *) &cliaddr, clilen) < 0){
            perror(NULL);
            close(sockfd);
            exit(1);
        } /* Уходим ожидать новую датаграмму*/
    }
    return 0;
}

Программа выводит ошибки , в чем дело помогите))

10_2.cpp: В функции «int main()»:

10_2.cpp:50:84: ошибка: некорректное преобразование из «int*» в «socklen_t* {aka unsigned int*}» [-fpermissive]

/usr/include/i386-linux-gnu/sys/socket.h:166:16: ошибка: при инициализации 6 -го аргумента «ssize_t recvfrom(int, void*, size_t, int, sockaddr*, socklen_t*)» [-fpermissive]

Hunter_nub
()

memory mapped файл

Форум — Development
#include<stdlib.h>
#include<stdio.h>
#include<fcntl.h>
#include<iostream>
#include <sys/types.h>
#include <unistd.h>
#include <dirent.h>
#include <sys/mman.h>

/* Ниже следует описание типа структуры, которым мы забьем
файл, и двух указателей на подобный тип. Указатель ptr
будет использоваться в качестве начального адреса 
выделенной области памяти, а указатель tmpptr – для 
перемещения внутри этой области. */
struct A {
    double f;
    double f2;
};

int main()
{
    int fd; /* Файловый дескриптор для файла, в 
котором будет храниться наша информация*/
    size_t length; /* Длина отображаемой части файла */
    int i; 
A *ptr, *tmpptr;
    /* Открываем файл или сначала создаем его (если 
такого файла не было). Права доступа к файлу при создании 
определяем как read-write для всех категорий пользователей 
(0666). Из-за ошибки в Linux мы будем вынуждены ниже в 
системном вызове mmap() разрешить в отображении файла и 
чтение, и запись, хотя реально нам нужна только запись. 
Поэтому и при открытии файла мы вынуждены задавать O_RDWR. */
    fd = open("mapped.dat", O_RDWR | O_CREAT, 0666);
    if( fd == -1){
        /* Если файл открыть не удалось, выдаем 
сообщение об ошибке и завершаем работу */
        printf("File open failed!\n");
        exit(1);
    }
    /* Вычисляем будущую длину файла (мы собираемся записать
    в него 100000 структур) */
    length = 100000*sizeof(struct A);
    /* Вновь созданный файл имеет длину 0. Если мы его 
    отобразим в память с такой длиной, то любая попытка 
    записи в выделенную память приведет к ошибке. Увеличиваем
    длину файла с помощью вызова ftruncate(). */
    ftruncate(fd,length);
    /* Отображаем файл в память. Разрешенные операции над
    отображением указываем как PROT_WRITE | PROT_READ по 
    уже названным причинам. Значение флагов ставим в 
    MAP_SHARED, так как мы хотим с охранить информацию, 
    которую занесем в отображение, на диске. Файл 
    отображаем с его начала (offset = 0) и до конца 
    (length = длине файла). */
    ptr = (struct A*)mmap(NULL, length, PROT_WRITE | PROT_READ, MAP_SHARED, fd, 0);
    /* Файловый дескриптор нам более не нужен, и мы его
    закрываем */
    close(fd);
    if( ptr == MAP_FAILED ){
        /* Если отобразить файл не удалось, сообщаем об
        ошибке и завершаем работу */
        printf("Mapping failed!\n");
        exit(2);
    }
    /* В цикле заполняем образ файла числами от 1 до 100000
    и их квадратами. Для перемещения по области памяти 
    используем указатель tmpptr, так как указатель ptr на 
    начало образа файла нам понадобится для прекращения 
    иотображения вызовом munmap(). */
    tmpptr = ptr;
    for(i = 1; i <=100000; i++){
        tmpptr->f = i;
        tmpptr->f2 = tmpptr->f * tmpptr->f;
        tmpptr++;
    }
    /* Прекращаем отображать файл в память, записываем 
    содержимое отображения на диск и освобождаем память. */
    munmap((void *)ptr, length);
    return 0;
}

Эта программа создает файл, отображает его в адресное пространство процесса и заносит в него информацию с помощью обычных операций языка С.

дали такое задание: Модифицируйте программу из предыдущего раздела так, чтобы она отображала файл, записанный программой из раздела «Анализ, компиляция и прогон программы для создания memory mapped файла и записи его содержимого», в память и считала сумму квадратов чисел от 1 до 100000, которые уже находятся в этом файле. Что то тема для меня сложновато(( Помогите разобратся)

Hunter_nub
()

Анализ, компиляция и прогон программы для создания memory mapped файла и записи его содержимого

Форум — Development

Помогите исправить ошибки

#include<stdlib.h>
#include<stdio.h>
#include<fcntl.h>
#include<iostream>
#include <sys/types.h>
#include <unistd.h>
#include <dirent.h>
#include <sys/mman.h> 
int main()
{
    int fd; /* Файловый дескриптор для файла, в 
котором будет храниться наша информация*/
    size_t length; /* Длина отображаемой части файла */
    int i; 
    /* Ниже следует описание типа структуры, которым мы забьем
    файл, и двух указателей на подобный тип. Указатель ptr
    будет использоваться в качестве начального адреса 
    выделенной области памяти, а указатель tmpptr – для 
    перемещения внутри этой области. */
    struct A {
        double f;
        double f2;
    };
A *ptr,tmpptr;
    /* Открываем файл или сначала создаем его (если 
такого файла не было). Права доступа к файлу при создании 
определяем как read-write для всех категорий пользователей 
(0666). Из-за ошибки в Linux мы будем вынуждены ниже в 
системном вызове mmap() разрешить в отображении файла и 
чтение, и запись, хотя реально нам нужна только запись. 
Поэтому и при открытии файла мы вынуждены задавать O_RDWR. */
    fd = open("mapped.dat", O_RDWR | O_CREAT, 0666);
    if( fd == -1){
        /* Если файл открыть не удалось, выдаем 
сообщение об ошибке и завершаем работу */
        printf("File open failed!\n");
        exit(1);
    }
    /* Вычисляем будущую длину файла (мы собираемся записать
    в него 100000 структур) */
    length = 100000*sizeof(struct A);
    /* Вновь созданный файл имеет длину 0. Если мы его 
    отобразим в память с такой длиной, то любая попытка 
    записи в выделенную память приведет к ошибке. Увеличиваем
    длину файла с помощью вызова ftruncate(). */
    ftruncate(fd,length);
    /* Отображаем файл в память. Разрешенные операции над
    отображением указываем как PROT_WRITE | PROT_READ по 
    уже названным причинам. Значение флагов ставим в 
    MAP_SHARED, так как мы хотим с охранить информацию, 
    которую занесем в отображение, на диске. Файл 
    отображаем с его начала (offset = 0) и до конца 
    (length = длине файла). */
    ptr = (struct A )mmap(NULL, length, PROT_WRITE | PROT_READ, MAP_SHARED, fd, 0);
    /* Файловый дескриптор нам более не нужен, и мы его
    закрываем */
    close(fd);
    if( ptr == MAP_FAILED ){
        /* Если отобразить файл не удалось, сообщаем об
        ошибке и завершаем работу */
        printf("Mapping failed!\n");
        exit(2);
    }
    /* В цикле заполняем образ файла числами от 1 до 100000
    и их квадратами. Для перемещения по области памяти 
    используем указатель tmpptr, так как указатель ptr на 
    начало образа файла нам понадобится для прекращения 
    иотображения вызовом munmap(). */
    tmpptr = ptr;
    for(i = 1; i <=100000; i++){
        tmpptr.f = i;
        tmpptr.f2 = tmpptr.f*tmpptr.f;
        tmpptr++;
    }
    /* Прекращаем отображать файл в память, записываем 
    содержимое отображения на диск и освобождаем память. */
    munmap((void *)ptr, length);
    return 0;
}

при конпеляции выдает ошибки 7_2.cpp: В функции «int main()»:

7_2.cpp:54:83: ошибка: нет подходящей функции для вызова «main()::A::A(void*)»

7_2.cpp:54:83: замечание: candidates are:

7_2.cpp:20:12: замечание: main()::A::A()

7_2.cpp:20:12: замечание: candidate expects 0 arguments, 1 provided

7_2.cpp:20:12: замечание: main()::A::A(const main()::A&)

7_2.cpp:20:12: замечание: no known conversion for argument 1 from «void*» to «const main()::A&»

7_2.cpp:58:17: ошибка: no match for «operator==» in «* ptr == 4294967295u»

7_2.cpp:73:15: ошибка: no «operator++(int)» declared for postfix «++» [-fpermissive]

Hunter_nub
()

задачка с семафорами

Форум — Development

дали такую задачу: найти все простые натуральные числа из интервала [A,B] , двоичная запись которых является палиндромом - .Вычислить сумму найденных чисел) Программу я уже сделал, но сюда нужно пристроить семафор. Вот не знаю только куда Не подскажите куда?

Hunter_nub
()

Передача данных через пайп

Форум — Development

строки умею передавать через пайп а переменные нет((

result = fork();
pipe(fd)
int A=5;
if (result>0 )
{
//передаем в пайп переменную A 
}
int b=10;
if (result==0)
{
//сюда передается через пайп переменная А  
//вычисляем b=b+A;
}

как такое реализовать ??

Hunter_nub
()

RSS подписка на новые темы