Послать сообщение всем активным пользователям
Подскажите команду , при помощи которого можно посылать всем активным пользователям сообщение (сообщение нах-ся в файле)
Подскажите команду , при помощи которого можно посылать всем активным пользователям сообщение (сообщение нах-ся в файле)
Задана строка С содержащая не менее двух слов и символ '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;
}
может кто помочь сделать вот с этой частью: Для решения использовать столько процессов сколько слов в процессе
#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]
#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, которые уже находятся в этом файле. Что то тема для меня сложновато(( Помогите разобратся)
Помогите исправить ошибки
#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]
дали такую задачу: найти все простые натуральные числа из интервала [A,B] , двоичная запись которых является палиндромом - .Вычислить сумму найденных чисел) Программу я уже сделал, но сюда нужно пристроить семафор. Вот не знаю только куда Не подскажите куда?
строки умею передавать через пайп а переменные нет((
result = fork();
pipe(fd)
int A=5;
if (result>0 )
{
//передаем в пайп переменную A
}
int b=10;
if (result==0)
{
//сюда передается через пайп переменная А
//вычисляем b=b+A;
}
как такое реализовать ??