我有一个Windows C++程序正在执行以下操作:
FILE* pf = ...; *stdout = *pf; // stdout is defined in stdio.h
我正在寻找一个解释,当你更改stdout文件句柄的值时会发生什么.这只是重定向标准输出的一种方式吗?
-cr
在Unix C编程中,在进程退出之前显式关闭文件句柄是一种很好的做法,还是让操作系统关闭文件句柄从而避免不必要的代码?
通常会将两者中的哪一个视为首选替代方案?
例:
int main (int argc, char* argv[])
{
int sd;
sd = socket(...);
// Snip
close(sd); // Good or bad practice?
return 0;
}
Run Code Online (Sandbox Code Playgroud) Perl有没有办法以编程方式生成文件句柄?
我想同时打开十个文件并使用包含(CONST NAME + NUMBER)的文件句柄写入它们.例如:
print const_name4 "data.."; #Then print the datat to file #4
Run Code Online (Sandbox Code Playgroud) 我想写一下我在hash中填充的键和值对.我正在使用
open(OUTFILE,">>output_file.txt");
{
foreach my $name(keys %HoH) {
my $values = $HoH{$name};
print "$name: $values\n";
}
}
close(OUTFILE);
Run Code Online (Sandbox Code Playgroud)
它以某种方式创建了它,output_file.txt但它没有将数据写入它.可能是什么原因?
在阅读有关高级Perl编程(1)的书时,我遇到了这段代码:
while (defined($s = <>)) {
...
Run Code Online (Sandbox Code Playgroud)
defined在这里使用有什么特别的理由吗?perlop的 文档
说:
在这些循环结构中,然后测试指定的值(无论是自动还是显式赋值)以查看它是否已定义.定义的测试避免了line具有字符串值的问题,该字符串值将被Perl视为false,例如a
""或"0"没有尾随换行符.如果你真的想要这些值来终止循环,那么它们应该被明确地测试:[...]
那么,是否会有一个角落案例,或者仅仅是因为这本书太旧而且defined在最近的Perl版本中添加了自动测试?
(1) 高级Perl编程,第一版,Sriram Srinivasan.奥莱利(1997)
我想要一个从特殊文件句柄中读取的Perl模块,并将其<STDIN>传递给子例程.当你看到我的代码时,你会明白我的意思.以下是它之前的情况:
#!/usr/bin/perl
use strict; use warnings;
use lib '/usr/local/custom_pm'
package Read_FH
sub read_file {
my ($filein) = @_;
open FILEIN, $filein or die "could not open $filein for read\n";
# reads each line of the file text one by one
while(<FILEIN>){
# do something
}
close FILEIN;
Run Code Online (Sandbox Code Playgroud)
现在,子例程将文件名(存储在其中$filein)作为参数,使用文件句柄打开文件,并使用精细句柄逐个读取文件的每一行.
相反,我想从中获取文件名<STDIN>,将其存储在变量中,然后将此变量作为参数传递给子例程.从主程序:
$file = <STDIN>;
$variable = read_file($file);
Run Code Online (Sandbox Code Playgroud)
该模块的子程序如下:
#!/usr/bin/perl
use strict; use warnings;
use lib '/usr/local/custom_pm'
package Read_FH
# subroutine that parses the file
sub read_file …Run Code Online (Sandbox Code Playgroud) 请注意,我不是在问如何在文件末尾附加文本。我在问如何在文件开头添加文本。
let handle = try FileHandle(forWritingTo: someFile)
//handle.seekToEndOfFile() // This is for appending
handle.seek(toFileOffset: 0) // Me trying to seek to the beginning of file
handle.write(content)
handle.closeFile()
Run Code Online (Sandbox Code Playgroud)
似乎 mycontent写在文件的开头,但它也只是取代了现有的同意......谢谢!
我读过的所有文档都说__DATA__“特殊文件句柄”之类的内容,但它不是文件句柄,不是吗?
https://perldoc.perl.org/perldata#Special-Literals
默认情况下,当 Perl 读取文件来解析源代码时,DATA 文件句柄具有适当的 PerlIO 层。”
#!/bin/env perl
open($config, "<test.pl");
$config_copy = $config; # let's me copy a filehandle
while (<$config_copy>) {
print $_; # works just fine
}
$config_copy = __DATA__; # FAIL syntax error does not let me copy a filehandle
while (<$config_copy>) {
print $_;
}
__DATA__
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
我基本上想将文件句柄传递给配置文件读取器函数或传递__DATA__(如果存在),但读取器函数位于与段不同的包中__DATA__,因此我需要__DATA__作为参数传递,因为__DATA__只能从同一个包或文件它在其中声明,但 Perl 并不__DATA__像其他文件句柄那样对待。它不能作为函数参数进行赋值或传递。
------ package ConfigReader ------------------
package ConfigReader;
sub ReadConfig …Run Code Online (Sandbox Code Playgroud) 我需要一些帮助来理解以下Perl代码段.我有以下两个问题.
1.当地*PIPER意味着什么?即使我在local *语法对我来说之前已经完成了一些Perl编程.它是指针吗?
2.目的是什么?
curl http://www.somesite.net/cgi-bin/updateuser.cgi? -d "userid=$userid&password=$password\" -s |"; ?
Run Code Online (Sandbox Code Playgroud)
谢谢 :)
local *PIPER;
$http_query = "curl http://www.somesite.net/cgi-bin/updateuser.cgi? -d \"userid=$userid&password=$password\" -s |";
open(PIPER,$http_query) or die "sorry";
while(<PIPER>)
{
$rets = $_;
}
close(PIPER);
return $rets;
Run Code Online (Sandbox Code Playgroud) 好的,我在这里有点问题.我意识到我不需要为*:: HTML设置一个$ handle来使这个代码片段起作用,但是这个代码从它的使用中脱离了上下文,我确实需要这个来处理$ handle.我收到的输出在片段下面,但我想要的输出是file.html包含"what \nsometext1 \nsometext2 \n".
open(HTML, ">file.html");
$handle = \*::HTML;
print $handle "what\n";
open(READ, "< somefile.txt"); #somefile.txt contains sometext1\nsometext2\n
while(<READ>)
{
print $handle;
}
close READ;
close HTML;
Run Code Online (Sandbox Code Playgroud)
file.html保留输出"what",GLOB(0x6278b0)GLOB(0x6278b0)打印到终端窗口.
filehandle ×10
perl ×7
c ×2
c++ ×1
glob ×1
nsfilehandle ×1
objective-c ×1
prepend ×1
stdout ×1
subroutine ×1
swift ×1
typeglob ×1
unix ×1
while-loop ×1