2015-01-22 3 views
3

Вот часть кода, который я написал для материала 0, на сеанс экрана, открытый на одной из моих вкладок терминала Ubuntu.Невозможно подключиться к уже активному экрану через систему() в c

char command[60]; 
strcpy(command, "screen -S 8305.pts-1.MYUb -X stuff $'0'"); 
system(command); 

Это компилируется нормально только с предупреждением, как

ignoring return value of ‘system’, 

Но когда дело доходит до бега я получаю сообщение, как показано ниже:

No screen session found. 

Я попробовал систему() с другие команды оболочки, и он отлично работает. Команда для экрана также отлично работает, когда вы запускаете ее в сеансе терминала, а не в c-коде.

+1

Как пользователь выполняет бинарный файл под? – cmidi

+1

Это была проблема. Я запускал код в терминале, в котором был введен пароль sudo, и он был постоянно сохранен. Пожалуйста, раскройте свой комментарий и сделайте это как решение. Спасибо – user3684042

+0

Вы можете отредактировать решение, которое я разместил, с вашими предложениями и отметить его как ответ спасибо. – cmidi

ответ

2

Скорее всего, вы используете команду как другой пользователь, чем пользователь, которому принадлежит экран. Например, запустить двоичный файл как sudo.

Вы можете запустить ps aux, чтобы найти пользователя, под которым работает ваш двоичный файл.

Чтобы заставить системную команду работать, вы должны запускать ее как пользователь, которому принадлежит экран.

1

Я думаю, проблема в том, что вы используете -S, который создает новый именованный экран, и -X, который отправляет команду на уже запущенный сеанс экрана.

Вы либо хотите:

system("screen -S 8305.pts-1.MYUb cmd"); 

ИЛИ

system("screen -r 8305.pts-1.MYUb -X cmd"); 

FYI - Я не уверен, что stuff $0, предполагают, чтобы быть, и в контексте кода, поставляемого не будет работать - но я считаю, что другая проблема, чем та, о которой вы сообщали.

С man(1) страницы

-S имя_сеанс
При создании нового сеанса, этот параметр может быть использован для указания значащего имени для сеанса.

И

-X Отправить указанную команду для запущенной сессии экрана.

+0

Я уверен в команде экрана, которую я передаю системе(), поскольку она отлично работает в терминале bash. – user3684042

+0

Сообщение об ошибке, которое вы указали, это то, что вы получаете из '-X', когда сеанс еще не запущен. FYI - Если вы пытаетесь запустить новый экран и отправить в него команду, вам НЕ нужно '-X'. Если вы пытаетесь подключиться к существующему сеансу, не используйте '-S' (который создает новый сеанс), но вместо этого используйте' -r' – user590028