Поскольку Bumblebee — это проект, направленный на обеспечение поддержки технологии Optimus, позволяющей использовать дискретный графический процессор Nvidia для высокопроизводительных задач, а IGP — для всех остальных, вам потребуется использовать несколько команд для переключения между ними. А значит, между драйвером Intel i915
и драйвером Nvidia nvidia-driver
.
Короче говоря, вы используете IGP для всего, что вы делаете, за исключением случаев, когда вы используете команду optirun
для запуска программы с использованием дискретного графического процессора.
Поскольку вывод команды optirun glxgears -info
дает вам GL_VERSION = 4.6.0 NVIDIA 390.87
, это означает, что вы используете (благодаряoptirun
)драйверу NVIDIA 390.87.
Таким образом, оба драйвера установлены правильно, и вы используете драйвер Nvidia только перед программой, которую хотите запустить, с помощью optirun
.
Похоже, что начиная с версии Bumblebee 3.0 переключение между IGP и дискретным графическим процессором является функцией, встроенной в Bumblebee и включенной по умолчанию. Вы должны попробовать некоторые тяжелые -программы, чтобы увидеть, произойдет ли это, у меня нет ноутбука Optimus, чтобы попробовать это самому.
Стандартное определение основной функции программы на C:
int main(int argc, char *argv[])
Здесь argc
и argv
— аргументы командной строки, -v
и match
для grep
в данном случае. Обратите внимание, что они не одна строка, но оболочка уже разделила аргументы на отдельные строки (NUL/\0
с завершением, как обычно в C ). argc
содержит количество аргументов, а argv
сами аргументы.
С другой стороны, стандартный ввод — это просто FILE *
, вы можете использовать его напрямую с любой из функций stdio
. fgets(buf, sizeof(buf), stdin)
и т. д.
Я не знаю, откуда ты взял cat /dev/pts/0
. Он будет читать с этого конкретного псевдо-терминала -, возможно, конфликтуя с чтением вашей оболочкой на том же терминале. (Попробуйте открыть два терминала, xterm, сеансы SSH, экран и т. д. Затем запустите tty
на первом, он покажет имя терминала, например. /dev/pts/123
. Запуститеcat /dev/pts/123
(с данным именем )во втором терминале, затем попробуйте ввести что-нибудь в первом.)
Канал представляет собой буфер, выделенный в ядре с файловыми дескрипторами, связанными с концами чтения и записи. Когда вы бежитеcat file.txt | grep -v match
:
pipe()
)fork()
с. Дочерний процесс использует системный вызов dup2()
, чтобы закрыть свой стандартный поток вывода и дублировать конец записи канала в стандартный вывод. (После этого запись в стандартный вывод будет осуществляться в буфер ядра. )Затем дочерний exec()
с cat
с обновленным стандартным выводом. fork()
снова s.Дочерний процесс использует системный вызов dup2()
, чтобы закрыть свой стандартный поток ввода и дублировать конец канала чтения для стандартного ввода. (После этого чтение из стандартного ввода будет происходить из буфера ядра. )Затем дочерний exec()
s grep
с обновленным стандартным вводом. В этот момент работают как cat
, так и grep
. Если grep
попытается прочитать из стандартного ввода (канал ), а канал пуст, чтение будет заблокировано. Если cat
снова попытается записать в стандартный вывод (, канал )и канал будут заполнены, запись будет заблокирована. В противном случае, когда cat
записывает в буфер, grep
может читать из буфера.