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