`

linux头文件引用问题

阅读更多

读文件尾的两个字节, 代码如下:

 

#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
//#include <unistd.h>
#include <fcntl.h>


#define MSG_ERR printf
#define S_OK        0
#define S_FAILED    1


int main(int argc, char *argv[])
{
    char *filename = "test.txt";
    int ret;

    int r = S_FAILED;
    int fd = -1;
    int size = 0;
    struct stat statBuf;

    do {
        if(stat(filename, &statBuf) != 0) {
            printf("STAT file error.(%s)\n", strerror(errno));
            break;
        }

        printf("file: %s length = %d", filename, statBuf.st_size);

        if((fd = open(filename, O_RDONLY)) == -1) {
            MSG_ERR("cannot open file: %s\n", filename);
            break;
        }
        else{
            MSG_ERR("open file %s ok\n", filename);
        }


        ret = lseek(fd, -2, SEEK_END);
        //ret = lseek(fd, statBuf.st_size - 2, SEEK_CUR);
        if(ret == -1)
        {
            MSG_ERR("seek file '%s' error:%s\n", strerror(errno), filename);
            break;
        }
        else{
            MSG_ERR("seek ok, ret = %d\n", ret);
        }

        //read the last 2 bytes
        ret = read(fd, &size, 2);
        if(ret != 2)
        {
            MSG_ERR("read file '%s' error:%s\n", strerror(errno), filename);
            MSG_ERR("ret=%d", ret);
            break;
        }
        else{
            MSG_ERR("read ok, size = %d\n", size);
        }


        r = S_OK;       // УÑéͨ¹ý
    }while(0);

    if(fd != -1){
        close(fd);
    }

    return r;
}
  

头文件string.h和unistd.h, 在RHEL5.4_x86_64上测试结果:

1.只使用string.h结果错误

2.使用unistd.h正确

3.都用正确
4.都不用段错误

 

分享到:
评论

相关推荐

    linux头文件

    这个头文件定义了大量在其他系统调用中被引用的数据类型,如`off_t`、`size_t`、`ssize_t`等,这些都是在进行文件操作、内存管理以及其他低级系统功能时非常重要的类型。例如,`ssize_t`类型常用于表示读写操作返回...

    C头文件引用关系分析程序

    win/linux通用C代码,编译后在命令行中以C源代码作为参数,分析这些C代码的头文件引用关系

    关于linux驱动(应用)程序头文件使用

    在Linux驱动程序开发过程中,通常会涉及到多个层次的头文件引用,包括但不限于`linux/`、`asm/`和`mach/`目录下的头文件。下面我们将逐一分析这些关键头文件的具体作用。 ##### 1. `linux/***.h` 系列头文件 - **`...

    linux下的C语言POSIX正则表达式头文件和源文件: regex.h regex.cpp

    在Linux操作系统中,C语言编程时常常需要处理字符串匹配和模式查找的问题,这时POSIX(Portable Operating System Interface)正则表达式库就显得尤为重要。POSIX正则表达式是符合IEEE Std 1003.1标准的一套规则,它...

    sched的头文件内容

    这个头文件包含了对其他关键头文件的引用,例如`&lt;asm/param.h&gt;`(提供HZ常量,表示每秒的时钟ticks数量)、`&lt;linux/config.h&gt;`(配置选项)、`&lt;linux/smp.h&gt;`(多处理器支持)等,这些引用为调度器提供了必要的基础...

    linux mircal静态库以及头文件

    本篇将详细解释`libmircal.a`静态库和`include`头文件的使用,以及如何在编译过程中正确地引用它们。 首先,`libmircal.a`是一个静态库文件,它包含了`mircal`库的预编译代码。静态库的主要特点是,在编译程序时,...

    字符设备驱动程序的开发

    其他标志使用较少,它们都在`linux/fcntl.h`头文件中定义。 4. **私有数据(private_data)**: `private_data`是一个通用指针,供驱动程序自定义使用,它可以指向驱动程序特定的数据结构,以便存储与特定文件相关的...

    openssl-1.01e 静态库含头文件

    开发者在编写与 OpenSSL 交互的代码时,会引用这些头文件来声明和使用 OpenSSL 的 API。 `out32` 文件夹可能包含编译过程中产生的输出文件,如对象文件、配置脚本或编译日志。不过,这个名称并不常见,具体用途可能...

    jni.h头文件

    例如,在32位Windows平台上,它可能会定义`jint`为`int`,而在64位Linux上可能定义为`long`。这个文件让JNI代码能够在不同的平台上正确地编译和运行。 在实际使用中,开发者通常不会直接包含`jni_md.h`,而是通过`#...

    pthread相关的头文件与 库

    标题中的"pthread相关的头文件与库"指的就是在开发多线程程序时需要引用的`pthread.h`头文件以及对应的`pthread.lib`库文件和`pthread.dll`动态链接库。下面将详细解释这三个组件: 1. **pthread.h**: 这是`pthread...

    libxl头文件和库

    这个库通常包含头文件和库文件,开发者通过引用头文件并在代码中链接库文件,能够在C++项目中实现读写Excel文件的功能。 描述中提到“精简的版本”,意味着这个版本可能去除了非核心功能,比如帮助文档,以减小体积...

    cximage_linux_port.tar.gz_Tested_cximage linux_cximage linux_cx

    2. 头文件引用:在源代码中正确包含Linux版本的CxImage头文件。 3. 链接库:确保在编译时链接了cximage的库文件。 4. 兼容性问题:由于Linux内核和库版本的更新,可能需要针对不同发行版进行适配。 总的来说,...

    linux常用引用程序教程

    2. **头文件和库**:Linux提供了大量的系统头文件和库,如`stdio.h`(标准输入输出)、`unistd.h`(UNIX标准函数)和`stdlib.h`(通用实用函数)。C程序员需要了解如何包含这些头文件并正确使用对应的函数。 3. **...

    MySQL中头文件和库.rar

    在进行MySQL的C++编程时,我们需要引用MySQL的头文件和库来实现与数据库的交互。头文件包含了函数声明和类型定义,而库则包含了实际的实现代码,使得我们的程序能够调用MySQL的功能。 在标题提到的"MySQL中头文件和...

    c语言图形库头文件解决方法

    在项目中使用图形库时,确保正确地引用头文件至关重要。例如,如果你使用SDL,你的C源代码可能会类似这样: ```c #include #include int main() { SDL_Init(SDL_INIT_VIDEO); SDL_Window *window = SDL_...

    JNI头文件

    使用`NewGlobalRef`和`DeleteGlobalRef`来创建和释放全局引用,防止Java对象过早被垃圾回收。另外,本地代码分配的内存需要手动使用`malloc`和`free`来管理。 10. **跨平台兼容性**:由于`jni_md.h`包含平台特定的...

    activeMQ所需的头文件和静态库

    理解并正确引用这些头文件是使用ActiveMQ C++客户端的第一步。 其次,静态库是预先编译的代码集合,它们被链接到目标程序中,使得程序在运行时可以直接调用库中的函数和数据。在Linux系统中,静态库通常以`.a`为...

    OpenGL开发库 (包含头文件和库文件)

    头文件是C或C++编程中包含函数定义、数据类型声明等的文件,程序员在编写代码时需要引用它们来调用OpenGL的功能。库文件则包含了预编译的二进制代码,这些代码在程序链接阶段会被加载到应用程序中,以便执行各种图形...

    OpenSSL在64位系统下生成的lib/dll与头文件

    3. **头文件**:头文件包含了函数声明和常量定义,开发者在编写代码时需要引用这些头文件来使用OpenSSL的功能。常见的头文件有`#include &lt;openssl/ssl.h&gt;`、`#include &lt;openssl/evp.h&gt;`等,它们定义了加密、哈希、...

    VSCode 4Linux

    VS,Linux Version,Extension:Clang,CMake,C/C++ IntelliSense.

Global site tag (gtag.js) - Google Analytics