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

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

Вернуться   Форум программистов > Операционные системы > Linux (Ubuntu, Debian, Red Hat, CentOS, Mint)
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2013, 10:28   #1
XaTTa6bI4
Новичок
Джуниор
 
Регистрация: 27.04.2013
Сообщений: 5
По умолчанию Послать сообщение другому пользователю в системе

Не получается отправить сообщение. выдает синтаксис функции write username [tty]. как добавить к write имя пользователя и терминал?

Код C
Код:
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
int main ()
{
int st;
char A[20];
char B[20];
printf ("Пользователи находящиеся в системе\n");
if (fork()==0)
execlp("who", "who",NULL);
wait(&st);
printf ("Введите имя пользователя\n");
scanf ("%s",A);
printf ("Введите терминал\n");
scanf ("%s",B);
string wr = "w|write $A $B";
system(wr.c_str());
return 0;
}
XaTTa6bI4 вне форума Ответить с цитированием
Старый 27.04.2013, 11:02   #2
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Код:
string wr = "w|write $A $B";
По моему конструкции $A в си нет. (вы с шелом не путаете?) Оно будет записано в строку wr именно в виде "$A".

Попробуйте вывести wr просто на экран. Там будет что-то вроде
Цитата:
w|write $A $B
Но исполнено оно будет примерно как

Цитата:
w|write //тут слева два пробела
Поскольку командный интерпретатор считает, что A и B - переменные, но вы не указали ему их значения (по-умолчанию это пустая строка).

Либо передавайте сразу готовую строку, либо объявите командному интерпретатору значения переменных.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 27.04.2013 в 11:12.
ROD вне форума Ответить с цитированием
Старый 27.04.2013, 11:15   #3
XaTTa6bI4
Новичок
Джуниор
 
Регистрация: 27.04.2013
Сообщений: 5
По умолчанию

он и выводит синтаксис функции write (usage: write uses [tty]).
надо как-то указать ему, что передавать надо переменным А и В
XaTTa6bI4 вне форума Ответить с цитированием
Старый 27.04.2013, 11:21   #4
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Вариант 1:
Подаем сразу готовую строку

Код:
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
int main ()
{
int st;
char A[20];
char B[20];
printf ("Пользователи находящиеся в системе\n");
if (fork()==0)
execlp("who", "who",NULL);
wait(&st);
printf ("Введите имя пользователя\n");
scanf ("%s",A);
printf ("Введите терминал\n");
scanf ("%s",B);



string wr;
wr ="w|write "
wr+=A;
wr+=" ";
wr+=B;
system(wr.c_str());

return 0;
}

Вариант 2:
Задаем командному интерпретатору переменные.

Код:

#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
int main ()
{
int st;
char A[20];
char B[20];
printf ("Пользователи находящиеся в системе\n");
if (fork()==0)
execlp("who", "who",NULL);
wait(&st);
printf ("Введите имя пользователя\n");
scanf ("%s",A);
printf ("Введите терминал\n");
scanf ("%s",B);

string wr;
wr="A=";
wr+=A;
system(wr.c_str());

wr="B=";
wr+=B;
system(wr.c_str());

wr="w|write $A $B";
system(wr.c_str());

return 0;
}

Есть и другие варианты.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 27.04.2013, 11:34   #5
XaTTa6bI4
Новичок
Джуниор
 
Регистрация: 27.04.2013
Сообщений: 5
По умолчанию

проблема с пробелом. пишет сразу имя пользователя и терминал вместе

Последний раз редактировалось XaTTa6bI4; 27.04.2013 в 13:52.
XaTTa6bI4 вне форума Ответить с цитированием
Старый 27.04.2013, 13:51   #6
XaTTa6bI4
Новичок
Джуниор
 
Регистрация: 27.04.2013
Сообщений: 5
По умолчанию

пробел поставил. но теперь он сразу же закрывает диалог (E0F). как этого избежать?
XaTTa6bI4 вне форума Ответить с цитированием
Старый 27.04.2013, 15:36   #7
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

хм... тут я уже сходу сказать не смогу - надо проверять и смотреть, у меня нет линукса под рукой.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 27.04.2013, 15:52   #8
XaTTa6bI4
Новичок
Джуниор
 
Регистрация: 27.04.2013
Сообщений: 5
По умолчанию

хорошо, спасибо на этом)
XaTTa6bI4 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запретить SQL-команду другому пользователю Алекс80 Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 2 21.04.2012 12:09
послать сообщение ListView. VintProg Общие вопросы Delphi 1 19.11.2011 11:24
Сообщение пользователю о вводе данных в ячейку robbe Microsoft Office Excel 2 24.03.2010 05:03
Сообщение другому окну Бонарт Win Api 13 15.08.2007 20:23
послать сообщение кнопке Fireleo Win Api 7 06.08.2007 11:14