C++ 将Tcl中的命令输出重定向到文件时,文件将以DOS格式生成

C++ 将Tcl中的命令输出重定向到文件时,文件将以DOS格式生成,c++,c,tcl,C++,C,Tcl,我想在Tcl中开发一个命令“redirect”,它将要执行的命令作为参数,并将命令的输出重定向到用户提供的文件。我使用下面的代码,它工作得很好。这段代码唯一的问题是文件是以DOS格式创建的。由于格式应该是Unix样式而不是DOS,如何消除这种情况 我尝试了设置:在VI编辑器中设置二进制文件和其他解决方法 vim+“argdo setlocal ff=unix”+wqa 但是,它找不到以DOS格式创建此文件的任何原因 Tcl_Channel stdoutChannel = Tcl_GetStdCh

我想在Tcl中开发一个命令“redirect”,它将要执行的命令作为参数,并将命令的输出重定向到用户提供的文件。我使用下面的代码,它工作得很好。这段代码唯一的问题是文件是以DOS格式创建的。由于格式应该是Unix样式而不是DOS,如何消除这种情况

我尝试了设置:在VI编辑器中设置二进制文件和其他解决方法 vim+“argdo setlocal ff=unix”+wqa 但是,它找不到以DOS格式创建此文件的任何原因

Tcl_Channel stdoutChannel = Tcl_GetStdChannel(TCL_STDOUT);

Tcl_Channel stderrChannel = Tcl_GetStdChannel(TCL_STDERR);

if(stdoutChannel) {

  Tcl_Flush(stdoutChannel);

}

if(stderrChannel) {

  Tcl_Flush(stderrChannel);

}

FILE* filePtr = fopen(filename, "wb");

int pfd = fileno(filePtr);

int saved = dup(1);

close(1);

Tcl_Obj* commandResult = Tcl_NewStringObj(command,strlen(command));

dup2(pfd,STDOUT_FILENO);

Tcl_EvalObj(TBXslaveInterp,commandResult);

close(pfd);

fflush(stdout);

// restore it back

dup2(saved, 1);

close(saved);

return TCL_OK;
输出
注意^M在执行cat操作时打印。这是因为保存文件的DOS格式。

Tcl允许您使用
chan configure
命令(也称为
fconfigure
)控制通道(文件句柄、套接字等)的行尾转换。特别是,您希望将
-translation
选项配置为
lf
(用于使用换行符)或
binary
(这还设置了一些其他内容)。Tcl忽略了C stdio中的设置,因为它直接访问操作系统来执行I/O,而行尾转换在这一点上没有完成

根据您的具体操作,在脚本中添加以下内容之一:

chan configure stdout -translation lf
您还可以从C设置频道转换:

/*猜猜“chan configure”是什么包装*/
Tcl_SetChannelOption(interp、stdoutChannel、“-translation”、“binary”);

请快速查看“帮助”部分中的文章,并重新表述您的问题并设置其格式。你的问题无法理解,sry
chan configure stdout -translation lf
chan configure stdout -translation binary