標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
ISO C |
両方 |
#include <stdio.h>
int rename(const char *oldname, const char *newname);
ファイルの名前を、oldname によって示される名前から、newname によって示される名前に変更します。
oldname ポインターは、既存のファイル名を指している必要があります。newname ポインターは、既存のファイル名を指定する必要はありません。オープン・ファイルの名前変更はできません。エラーの場合には、ファイルの名前は変更されません。
rename() 関数は、メモリー・ファイルと DASD データ・セットの名前を変更します (テープなどの非 DASD データ・セットはサポートされません)。また、この関数は、PDS (および PDSE) の個々のメンバーも名前変更し、さらに、PDS をシミュレートするファイルも名前変更します。
POSIX C の特殊な動作: z/OS®UNIX サービス環境で作業中でない場合は、メモリー・ファイルをクローズしておく必要があります。
rename() に渡されたファイル名の解釈は、プログラム で、POSIX(ON) または POSIX(OFF) が実行中であるかどうか によって異なります
HFS ファイルを MVS™ データ・セット名に変更したり、MVS データ・セット を HFS ファイル名に名前変更したりすることはできません。
oldname と newname は両方とも同じタイプ、すなわち、両方ともディレクトリーとするか、または両方ともファイルとする必要があります。
newname が既に存在している場合には、oldname が newname に名前変更される前に、これは除去されます。したがって、newname が既存のディレクトリーの名前を指定する場合 には、それが空のディレクトリーである必要があります。
oldname 引数がシンボリック・リンクを示す場合には、このシンボリック・リンクは名前変更されます。newname 引数がシンボリック・リンクを示す 場合には、このリンクは除去され、oldname が newname に名前変更されます。rename() は、シンボリック・リンクの内容により名前を指定されたファイル またはディレクトリーには影響しません。
後に続く rename() の場合、プロセスには、oldname を 含むディレクトリーおよび newname を含むディレクトリー での書き込み許可が必要です。oldname および newname がディレクトリー の場合には、rename() には、ディレクトリー自体での書き込み 許可も必要です。
oldname と newname の両方とも同じ ファイルを参照する場合には、rename() は正常に戻り、その他 のアクションは実行されません。
rename() が正常に実行されると、oldname と newname の 親ディレクトリーの変更および変更回数が更新されます。
正常に実行された場合、rename() は 0 を戻します。
⁄* CELEBR13
This example takes two file names as input and uses rename() to change
the file name from the first name to the second name.
*⁄
#include <stdio.h>
int main(int argc, char ** argv )
{
if ( argc != 3 )
printf( "Usage: %s old_fn new_fn¥n", argv[0] );
else if ( rename( argv[1], argv[2] ) != 0 )
printf( "Could not rename file¥n" );
}