是否可以使用chdir()
或其他一些命令来更改线程中的目录而不影响其他线程的 cwd?我正在使用pthread.h
.
*我正在尝试编写一个处理多个客户端连接和请求的服务器程序。客户端可用的命令之一是'cd'
命令。
我在TSO下的USS shell中,我有这个exec(名为tryit):
/* rexx */
"cd /differentdir"
"pwd"
Run Code Online (Sandbox Code Playgroud)
这是结果:
> pwd
/origdir
> tryit
/origdir
Run Code Online (Sandbox Code Playgroud)
换句话说,cd命令的效果似乎仅持续命令本身的持续时间.有没有办法让REXX exec以一种可在以下命令中识别的方式更改工作目录?
在Windows(可能是Unix)中,在(32位)程序中使用chdir()函数不会在程序退出时更改目录.(它在16位Windows程序中执行.)
有人知道如何在Windows 32位程序中执行此操作吗?
我试图使用脚本来使用Dir.chdir更改工作目录
这有效:
dirs = ['//servername/share','//servername2/share']
dirs.each do |dir|
Dir.chdir dir
end
Run Code Online (Sandbox Code Playgroud)
如果我将上述共享信息放入文本文件(每个新行共享)并尝试加载:
File.foreach("shares.txt") {|dir|
Dir.chdir dir
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
'chdir':没有这样的文件或目录 - // servername/share(Errno :: ENOENT)
如何从文本文件中读取共享并更改到该目录?有一个更好的方法吗?
我正在尝试编译一个我从网上获得的相对简单的应用程序.
运行make时出现以下错误:
In file included from main.cpp:2:0:
os.h: In function ‘void myOpenDir(const char*)’:
os.h:13:16: error: ‘chdir’ was not declared in this scope
Run Code Online (Sandbox Code Playgroud)
os.h文件如下所示:
#ifndef OS_H
#define OS_H
#if defined(__GNUG__)
#define INT64 long long
#define UINT64 unsigned long long
#include <dirent.h>
#define SPRTR '/'
void myOpenDir(const char* dirpath)
{
chdir(dirpath);
}
#elif defined(_MSC_VER)
#define INT64 __int64
#define UINT64 unsigned __int64
#include <direct.h>
#define SPRTR '\\'
void myOpenDir(const char* dirpath)
{
_chdir(dirpath);
}
#else
#error "Platform not supported. Need to update source …
Run Code Online (Sandbox Code Playgroud) 我今天了解到,在Windows上的python中,做的与做os.chdir('f:\\')
的完全不同os.chdir('f:')
.带有反斜杠的命令实际上会更改当前目录.如果没有反斜杠,该命令就像f:
在命令提示符下键入一样,并将当前目录更改为f
驱动器上的最后一个当前目录.
这是一个例子:
import time
import os
if __name__ == '__main__':
os.chdir('f:\\directory')
print 'cwd is {}'.format(os.getcwd())
os.chdir('d:\\directory')
print 'cwd is {}'.format(os.getcwd())
os.chdir('f:')
print 'cwd is {}'.format(os.getcwd())
os.chdir('f:\\')
print 'cwd is {}'.format(os.getcwd())
Run Code Online (Sandbox Code Playgroud)
版画
cwd is f:\directory
cwd is d:\directory
cwd is f:\directory
cwd is f:\
Run Code Online (Sandbox Code Playgroud)
我可以理解为什么这种差异很有用,但找不到任何记录这种行为的东西.我已经习惯了从我的目录中留下拖尾斜线,因为我通常在这里使用字符串......
这种行为记录在哪里吗?我可以依靠它不改变吗?
当我尝试使用文件句柄作为参数的"chdir"时,"chdir"返回0并pwd
返回仍然是同一目录.应该这样吗?
我试过这个,因为在chdir的文档中我发现:
"在支持fchdir的系统上,您可以传递文件句柄或目录句柄作为参数.在不支持fchdir的系统上,传递句柄会在运行时产生致命错误."
后来给出:
#!/usr/bin/perl -w
use 5.010;
use strict;
use Cwd;
say cwd(); # /home/mm
open( my $fh, '>', '/home/mm/Documents/foto.jpg' ) or die $!;
say chdir $fh; # 0
say cwd(); # /home/mm
Run Code Online (Sandbox Code Playgroud)
我认为这可能是文件目录的chdir - 但我这里没有DWIM.
我想知道目录是否存在.
如果没有,我想创建目录.
我的代码如下:
$da = getdate();
$dat = $da["year"]."-".$da["mon"]."-".$da["mday"];
$m = md5($url)."xml";
if(is_dir($dat))
{
chdir($dat);
$fh = fopen($m, 'w');
fwrite($fh, $xml);
fclose($fh);
echo "yes";
}
else
{
mkdir($dat,0777,true);
chdir($dat);
$fh = fopen($m, 'w');
fwrite($fh, $xml);
fclose($fh);
echo "not";
}
Run Code Online (Sandbox Code Playgroud) 我有一个我编写的程序,它遍历目录中的所有文件,并查找带有标志的文件,然后将它们输入到不同的程序中.它工作得很好,我现在唯一想做的就是将脚本放在一个盒子上的一个位置,然后让它知道查看我当前作为工作目录的目录.目前我所做的就是将脚本放到我正在工作的任何目录中,然后从那里调用它,但这很乏味,需要我不断地编写脚本.
我只是希望有一个更优雅的方式来做到这一点?任何帮助,将不胜感激.