0

以下のプログラムを実行します。エラーになると思っていました。しかし、それは完全に実行され、出力が得られました。

プログラム:

#include <stdio.h> 
#include <unistd.h>
#include <fcntl.h>
#include <string.h> 
#include <stdlib.h>

int main()
{
    int fd, retval;
    char wBuf[20] = "Be my friend", rBuf[20] = {0};

    fd = open("test.txt", O_RDWR | O_CREAT, 0666);
    write(fd, wBuf, strlen(wBuf));

    retval = lseek(fd, -3L, SEEK_END); //Observe 2nd argument
    if(retval < 0) {
            perror("lseek");
            exit(1);
    }

    read(fd, rBuf, 5);
    printf("%s\n", rBuf);
}

lseekも働きます

lseek(fd, -3I, SEEK_END); //but didn't print anything

他の文字の場合、次のようなエラーが発生しています

error: invalid suffix "S" on integer constant

Land Ion lseekとはどういう意味ですか?

4

2 に答える 2

2

Llong単に、定数がデフォルトの整数型ではなく型として扱われることを意味します。

Iは標準の C サフィックスではないため、コンパイラに何らかの拡張子(a)がない限り、有効ではありません。小文字( と同じことを意味する) を大文字と間違えている可能性がありますが、その場合でもシーク、読み取り、および印刷が行われると思われますが、そうではないことを示しているようです。lLI

I実際、標準 Cでどこを使用して何も出力しないかを考えることができる唯一の方法は、次のようなものです。

#define I * 0

これにより、実質的にlseek引数がゼロになります。


(a)場合によっては、複雑なデータ型を持つ gcc など。それらの 1 つを に渡すことの効果はlseek、せいぜい機能不全になる可能性があります。

おそらく、これはファイル内の特定の文字位置をシークし、その位置に対して直角にシークしようとする試みです:-)

于 2014-02-19T11:35:55.730 に答える
0

リテラル数値の L サフィックスは、数値の型がlongデフォルトの代わりにあることを単に意味します。int

123 //this is an int
123L //this is a long

I サフィックスは、複素数/虚数の gcc 拡張です。

123; //this is an int
123I; //this is a _Complex

C では、整数定数に次の接尾辞があります (大文字と小文字は区別されません)。

  • l長い間、
  • ll長い間。
  • u無署名の場合

浮動小数点定数の場合:

  • fフロート用。
  • lロングダブル用

(および特定のコンパイラがサポートする拡張機能。)

于 2014-02-19T11:38:22.933 に答える