C - 小代码,文件描述符,分段错误

时间:2014-10-14 09:06:13

标签: c linux

我已经编写了这段代码,但我遇到了问题

首先我有一个创建文件描述符(fd)的函数

int fd;//global

static int init_fd(int fd) {
    remove("file descriptor.txt");//if yet present
    fd = open("file descriptor.txt", O_WRONLY | O_CREAT, 0666);
    if (fd == -1) {
        printf("Error in opening the file descriptor!\n");
        exit(0);
    }
    return fd;

}

第二个函数是处理函数

static int handler(struct connection *conn, enum event ev) {


...

        int i;
        for (i = 0; i < array_size; i++) {
            if (!strncmp(conn->uri, uri_array[i], strlen(uri_array[i]))) {
                func_array[i](conn->request_method, conn->uri, NULL, init_fd(fd));
                close(fd);
                fd = open("file descriptor.txt", O_RDONLY);
                ret = read(fd, &buf, BUFSIZ);
                if (ret == -1) {
                    printf("Error in reading!\n");
                    exit(0);
                }
        ...
}

with fun_array是一个指向函数的指针

httpCallback_t func_array[MAXARRAY];

,功能是

void http_serve1(const char *method, const char *path, const httpOptions_t *options, int fd) {
    const char *string = "All is ok1!";
    int ret_value;

    // send header: 200 OK
    ret_value = sendHeaders(fd, TIMEOUT_SEC, NETHTTP_HTTP_HEADER_200, NETHTTP_Content_Type_text_html_utf8, NETHTTP_CRLF, NULL);

    // close the file descriptor
    close(fd);
}

和函数sendHeaders是

size_t sendHeaders(int fd, int seconds, const char* header1, ...) {
    va_list args;
    va_start(args, header1);
    size_t totalSize = 0;
    const char* hdr = header1;
    while (hdr != NULL) {
        size_t result = sendHeaders(fd, seconds, hdr, NULL); // segmentation fault
        if (result < 0) {
            return result;
        }
        totalSize += result;
        hdr = va_arg(args, const char*);
        va_end(args);
        return totalSize;
    }
    if (size == SIZE) {
        setErrorCode(ERROR);
        return ERROR;
    }
    size_t sizewrite = 1024;
    tmp[size] = strdup(hdr);
    write(fd, tmp, sizewrite);
    setErrorCode(SUCCESS);
    return SUCCESS;

}

我的问题是我的代码创建了一个文件描述符,但它没有写入内部,并且在运行期间我遇到了分段错误的问题。有人有建议吗?

0 个答案:

没有答案