Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 在tcl中读写_Multithreading_File_File Io_Tcl - Fatal编程技术网

Multithreading 在tcl中读写

Multithreading 在tcl中读写,multithreading,file,file-io,tcl,Multithreading,File,File Io,Tcl,在TCL中,当它同时写入时,是否有任何方式可以读取? 我尝试使用w+so,但没有成功 set f0 [open out11.tr w+] 因此,我想读取在同一时间写入的每一行。虽然w+模式可以工作,但当您打开它时,它确实会截断文件(因为它是对w模式的修改,它做了同样的事情)。如果不想擦除现有数据,请改用r+(在这种情况下,文件必须先存在) 如果要创建不存在的文件,可以通过同一通道读写,并且不想在打开时截断它,则必须使用其他形式的模式描述符(如果您对助记符感兴趣,则从POSIX描述符派生):

TCL中,当它同时写入时,是否有任何方式可以读取?
我尝试使用w+so,但没有成功

set f0 [open out11.tr w+]  

因此,我想读取在同一时间写入的每一行。

虽然
w+
模式可以工作,但当您打开它时,它确实会截断文件(因为它是对
w
模式的修改,它做了同样的事情)。如果不想擦除现有数据,请改用
r+
(在这种情况下,文件必须先存在)

如果要创建不存在的文件,可以通过同一通道读写,并且不想在打开时截断它,则必须使用其他形式的模式描述符(如果您对助记符感兴趣,则从POSIX描述符派生):


w+
RDWR create TRUNC
r+
是普通的
RDWR

以下示例使用w+打开文件(表示读/写,但如果文件已经存在,则截断内容)。然后它写每一行,然后读回,写,再读回

set lines {
    {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi}
    {accumsan est ut ante ornare et porta sem iaculis. Fusce a dolor}
    {magna, eget viverra quam. In sem justo, hendrerit a porttitor sit}
    {amet, scelerisque eu turpis. Nulla arcu arcu, condimentum vel}
    {fermentum sit amet, vulputate et sapien. Aenean convallis, purus vel}
    {molestie vehicula, diam eros adipiscing nibh, in dapibus nisi orci}
    {ut nisl. Ut fermentum felis a lectus lacinia dapibus. Nunc cursus}
    {nunc vitae massa fermentum imperdiet. In eu lectus quis arcu}
    {convallis imperdiet in quis tortor.}
}

set f [open out.txt w+]
set lastRead 0
foreach line $lines {
    # Write to the file
    puts $f $line

    # Read it back and display to stdout
    seek $f $lastRead
    gets $f line2
    set lastRead [tell $f]
}
close $f

你的问题不清楚:你想1)一次写入一行文件,然后2)读取刚刚写入的行吗?你对
多线程标记绝对肯定吗?您必须同时从多个OS线程访问一个文件,还是只是为了交错读/写(即,关于文件位置管理)?
set lines {
    {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi}
    {accumsan est ut ante ornare et porta sem iaculis. Fusce a dolor}
    {magna, eget viverra quam. In sem justo, hendrerit a porttitor sit}
    {amet, scelerisque eu turpis. Nulla arcu arcu, condimentum vel}
    {fermentum sit amet, vulputate et sapien. Aenean convallis, purus vel}
    {molestie vehicula, diam eros adipiscing nibh, in dapibus nisi orci}
    {ut nisl. Ut fermentum felis a lectus lacinia dapibus. Nunc cursus}
    {nunc vitae massa fermentum imperdiet. In eu lectus quis arcu}
    {convallis imperdiet in quis tortor.}
}

set f [open out.txt w+]
set lastRead 0
foreach line $lines {
    # Write to the file
    puts $f $line

    # Read it back and display to stdout
    seek $f $lastRead
    gets $f line2
    set lastRead [tell $f]
}
close $f