Передача дескриптора файла, открытого в C, интерпретатору tcl для использования

У меня есть программа на C, в которой я создаю интерпретатор tcl. Затем я открываю файл в программе C и хочу передать его интерпретатору tcl, чтобы интерпретатор tcl мог выполнять с ним ввод-вывод.

И я понимаю, что могу просто открыть файл в интерпретаторе tcl, но я получаю дескриптор открытого файла где-то еще, так что, к сожалению, это не вариант.

Любые идеи или приемы, или я что-то пропустил в tcl C API?


tcl
person xcramps    schedule 25.08.2009    source источник


Ответы (2)


man Tcl_MakeFileChannel

Почитайте там про Tcl_MakeFileChannel и Tcl_RegisterChannel

person msorc    schedule 25.08.2009
comment
Я видел chan command doc на уровне tcl, но не нашел ничего подходящего для этого. Я упростил задачу. На самом деле, я использую модуль Perl Tcl, и мне нужно создать команду tcl, чтобы сделать то же самое. Есть ли эквивалентный способ сделать это с помощью операции tcl chan? Потому что файл открыт в Perl, но я могу получить доступ к дескриптору файла, и мне нужно подключить его к подсистеме tcl. Но если нет, я стисну зубы и сделаю это на C таким образом. Спасибо за совет! - person xcramps; 26.08.2009
comment
Не могли бы вы написать расширение TCL C для создания новой команды TCL, которая делает то, что вам нужно, используя функции API Tcl_MakeFileChannel и Tcl_RegisterChannel? - person Jackson; 27.08.2009
comment
Я действительно думаю, что эти советы - путь, которым Вы должны идти. Tcl_MakeFileChannel берет дескриптор существующего файла и делает его доступным в Tcl. Внимательно прочитайте документацию. Я не работал с объединением Perl и Tcl, поэтому не могу дать конкретных советов по этому поводу. - person Michael Mathews; 29.08.2009

Не пришлось бы открывать файл перед созданием процесса интерпретатора tcl, если дескриптор файла будет иметь значение?

Если вы откроете после и скажете в программе C, что у вас есть файловый дескриптор 9, а затем передадите это 9 процессу интерпретатора tcl, то эта 9 ничего не будет значить.

person smcameron    schedule 25.08.2009
comment
Этот комментарий был бы применим, если бы он запускал Tcl как отдельный процесс, но я думаю, что у него есть интерпретатор Tcl, встроенный в программу C, т.е. в том же процессе. - person Colin Macleod; 27.08.2009