標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
POSIX.1a |
両方 |
#define _POSIX1_SOURCE 2
#include <unistd.h>
int ftruncate(int fildes, off_t length);
ftruncate() 関数は、オープン・ファイル記述子 fildes で示されるファイルを length で示される長さに切り捨てます。fildes は、書き込み用にオープンされる通常のファイルでなければな りません。ファイル・サイズが length を超えると、超過分のデータは廃棄さ れます。ファイル・サイズが length よりも小さいと、古い長さと新しい長さの間 のバイトがゼロとして読み取られます。ファイルのサイズへの変更は、ファイル・オフセットには影響を与えません。
XPG4.2 の特殊な動作: ftruncate() 関数によってファイル・サイズがプロセスのソフト・ファイル ・サイズ限度を超えることになる場合、ftruncate() は失敗 し、SIGXFSZ シグナルがそのプロセスに対して生成されます。
正常に実行された場合、ftruncate() 関数は、ファイル の st_ctime フィールドと st_mtime フィールドに マークを付けます。
正常に実行されなかった場合、ftruncate() 関数はファイルを変更しません。
z/OS UNIX の大規模ファイルのサポート: AMODE 64 C/C++ アプリケーションの場合は、z/OS UNIX の大規模ファイルが自動的にサポートされます。AMODE 31 C/C++ アプリケーションは、オプション LANGLVL(LONGLONG) を指定してコンパイルされなければなりません。また、ヘッダーがインクルードされる前に _LARGE_FILES フィーチャー・テスト・マクロを定義して、2 GB のサイズより大きい z/OS UNIX ファイルをこの関数が操作できるようにしなければなりません。ファイル・サイズとオフセット・フィールドは、63 ビットの幅に拡張されます。したがって、_LARGE_FILES フィーチャー・テスト・マクロの定義も行うには、ファイルを操作する他のいずれかの関数が必要です。
ftruncate() 関数は、正常終了時には 0 を戻します。
⁄* CELEBF49 *⁄
#define _POSIX_SOURCE
#include <fcntl.h>
#include <sys⁄stat.h>
#include <sys⁄types.h>
#include <unistd.h>
#undef _POSIX_SOURCE
#include <stdio.h>
#include <stdlib.h>
#define string_len 1000
main() {
char *mega_string;
int fd, ret;
char fn[]="write.file";
struct stat st;
if ((mega_string = (char*) malloc(string_len)) == NULL)
perror("malloc() error");
else if ((fd = creat(fn, S_IWUSR)) < 0)
perror("creat() error");
else {
memset(mega_string, '0', string_len);
if ((ret = write(fd, mega_string, string_len)) == -1)
perror("write() error");
else {
printf("write() wrote %d bytes¥n", ret);
fstat(fd, &st);
printf("the file has %ld bytes¥n", (long) st.st_size);
if (ftruncate(fd, 1) != 0)
perror("ftruncate() error");
else {
fstat(fd, &st);
printf("the file has %ld bytes¥n", (long) st.st_size);
}
}
close(fd);
unlink(fn);
}
}
write() wrote 1000 bytes
the file has 1000 bytes
the file has 1 bytes