标签: dup

Ruby中最好的做法是避免滥用赋值"="?

忘了x = y在Ruby中让x引用与y相同的对象,我被咬了几次.在Ruby术语中,我已经习惯了语言x = y.dup.忘掉这一点,y当我认为在作业的右侧是安全的时候,我无意中改变了.

我可以看到,x = y没有特殊原因避免简单的任务是有意义的,但同样的事情可能潜伏在其他地方,如

name = (person.last_name.blank? ? 'unknown' : person.last_name)
Run Code Online (Sandbox Code Playgroud)

以后name << title实际上会更改person.last_name而不仅仅是名称.

如果这也发生在你身上,你是如何学会避免它的?是否有某些红旗或图案需要寻找?你对每个作业都怀疑吗?你经常使用.dup吗?我不知道Ruby的用法是否会成为我的第二天性,所以任何有用的提示都会受到欢迎.

ruby variable-assignment dup equals-operator

3
推荐指数
1
解决办法
231
查看次数

为什么close()系统调用刷新输出?

这是我的代码:

#include<stdio.h>
#include<stdlib.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
#include<unistd.h>
#include<errno.h>
int main(int argc,char *argv[])
{
  int oldfd;
  int newfd;
  if(argc!=2)
  {
    printf("Usgae : %s file_name\n",argv[0]);
    exit(0);
  }
 oldfd=open(argv[1],O_RDWR|O_APPEND,S_IRWXU); // Opening the file in Read/Write mode
 if (-1 == oldfd)
 {
  perror("Error opening file");
  exit(0);
 }
 close(1); // closing stdout 
 newfd=dup(oldfd); //Now this newfd holds the value 1 
 close(oldfd); //closing the oldfd
 printf("\nStack Overflow"); //Now this printf will print content into the file as stdout closed already
 close(newfd);// closing newfd 
 return 0;
} …
Run Code Online (Sandbox Code Playgroud)

c unix dup

3
推荐指数
1
解决办法
1268
查看次数

python中的dup,dup2,tmpfile和stdout

这是从一个跟进的问题在这里.


我想去哪里

我希望能够暂时将stdout重定向到临时文件,而python仍然可以打印到stdout.这将涉及以下步骤:

  1. 创建stdout(new)的副本
  2. 创建临时文件(tmp)
  3. 将stdout重定向到 tmp
  4. 告诉python使用newstdout
  5. 重定向tmp到"真正的"标准输出
  6. 告诉python再次使用"真正的"标准输出
  7. 阅读和关闭 tmp

履行

我尝试通过以下方式实现上述方法:

import os
import subprocess
import sys

#A function that calls an external process to print to stdout as well as
#a python print to pythons stdout.
def Func(s, p = False):
    subprocess.call('echo "{0}"'.format(s), shell = True)
    if p:
        print "print"

sil = list() # <-- Some list to store the content of the temp files

print …
Run Code Online (Sandbox Code Playgroud)

python stdout io-redirection dup2 dup

3
推荐指数
1
解决办法
8381
查看次数

Python:fork,pipe和exec

我想在python应用程序中执行一个程序,它将在后台运行,但最终会到达前台.

GUI用于与之交互.但是控件是通过stdin和stdout上的控制台提供的.我希望能够使用我的应用程序的GUI来控制它,所以我的第一个想法是:

  • 叉子
  • 在父,dup2 stdin和stdout中访问它们
  • 执行孩子

这在python中是否可以轻松实现?有没有其他方法来实现我想要的,那会是什么?

python fork exec stdio dup

3
推荐指数
2
解决办法
9570
查看次数

dup() 系统调用的解释

当涉及到复制文件描述符时,我能得到对 dup() 函数的真正简化的解释吗?我想使用管道,但我还必须让孩子从管道中读取(这是最简单的部分),但将数据写回父级。我应该使用另一个管道,还是可以使用相同的管道?

linux pipe dup

2
推荐指数
1
解决办法
1337
查看次数

dup返回值始终为零

我想知道为什么dup总是在以下代码中返回零(其中打开一个文件,连续完成10个dup):

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>

void main()
{
        int i,fdo,fdd;

        if((fdo = open("test", O_RDWR | O_CREAT, 0666)) < 0)
        {
                        perror("main open");
                        return;
        }

        printf("main open: %d\n",fdo);


        for(i=0; i< 10;i++)
        {
                if((fdd = dup(fdo) < 0 )) {
                        perror("dup");
                        return ;
                }
                printf("opened %d, duped: %d \n", fdo,fdd);

        }

}
Run Code Online (Sandbox Code Playgroud)

当我运行程序时(在Linux 2.6.32-279.19.1.el6.i686,Netbsd或Solaris 5.9上),我得到以下结果:

main open: 3
opened 3, duped: 0 
opened 3, duped: 0 
opened 3, duped: 0 
opened 3, duped: 0 …
Run Code Online (Sandbox Code Playgroud)

c posix file dup

1
推荐指数
1
解决办法
126
查看次数

为什么 dup2 不按顺序发生?

这是一个代码片段。

int saved_stdout = dup(1);
int fd = open("file.txt", O_WRONLY | O_CREAT, 0640);

close(1);
dup(fd);
close(fd);

printf("This text should go into the file\n");

//restore stdout
dup2(saved_stdout, 1);
printf("stdout restore");
Run Code Online (Sandbox Code Playgroud)

我正在尝试了解 dup 和 dup2。所以我最初将我的 file.txt 连接到 stdout。所以每当我使用 printf 时,我应该写入 file.txt 而不是 stdout。但是,一旦我完成了这种用法,我也想将它恢复回来,所以我最后也使用了 dup2。

问题是文本“This text should go into the file\n”实际上从未进入文件,而是打印在标准输出上。为什么这样?我跟踪它,却发现 dup2 调用发生在 printf("This text..."); 之前。声明,为什么呢?

c process sequence dup2 dup

1
推荐指数
1
解决办法
341
查看次数

ruby中的递归函数覆盖了克隆(object.dup)变量的嵌套属性

我有这样的哈希:

entity = {1=> nil, 2 => {3 => nil, 4 => 1}}
Run Code Online (Sandbox Code Playgroud)

我编写了一个函数,可以使用递归删除给定实体的空值.

def clear_null_values(entity)
   entity.each do |key, value|
     if value == nil || value.blank?
       entity.delete(key)
     elsif value.is_a? Hash
       clear_null_values(value)
       entity.delete(key) if value.blank?
     end
   end
end 
Run Code Online (Sandbox Code Playgroud)

而且我还需要原始实体以用于其他目的.所以我复制了哈希变量,然后清除了空值.

final_entity = entity.dup
clear_null_values(entity)
puts entity
puts final_entity
Run Code Online (Sandbox Code Playgroud)

结果:

{2 => {4 => 1}}
{1=> nil, 2 => {4 => 1}} # the nested values are overwritten.
Run Code Online (Sandbox Code Playgroud)

理想情况下,final_entity应与原始实体相同.

问题1:为什么entity.dup复制只是外部的?

问题2:如何使final_entity成为原始实体的完全副本,即使我们修改实体,那么final_entity也不应该改变?

ruby hash clone ruby-on-rails dup

0
推荐指数
1
解决办法
85
查看次数