Я не могу открыть, написать и закрыть для идентификации в этом исходном коде, который я нашел. - PullRequest
0 голосов
/ 07 ноября 2018

На этот раз я спрашиваю, почему этот конкретный исходный код не скомпилируется. У меня есть все подходящие библиотеки или я так думал. Нужна ли мне другая библиотека, чтобы мои идентификаторы open, write и close идентифицировали свою функцию?

#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <iostream>

void usage(char *prog_name, char *filename) {
    printf("Usage: %s <data to add to %s>\n", prog_name, filename);
    exit(0);
}

void fatal(char *);             //A function for fatal errors
void *ec_malloc(unsigned int);  //An error-checked malloc() wrapper

int main(int argc, char *argv[])
{
    int fd;                     //filedescriptor
    char *buffer, *datafile;

    buffer = (char *)ec_malloc(100);
    datafile = (char *)ec_malloc(20);
    strcpy_s(datafile, sizeof(datafile), "/tmp/notes");

    if (argc < 2)               //If there aren'tcommand line arguments,
        usage(argv[0], datafile);//display usage message and exit
    strcpy_s(buffer, sizeof(buffer), argv[1]);//Copy into buffer

    printf("[DEBUG] buffer @ %p: \'%s\'\n", buffer, buffer);
    printf("[DEBUG] datafile @ %p: \'%s\'\n", datafile, datafile);

    strncat_s(buffer, sizeof(buffer), "\n", 1); //Add newline on the end

    //  Opening file
    fd = open(datafile, O_WRONLY | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR);
    if (fd == -1)
        fatal("in main() while opening file");
    printf("[DEBUG] file descriptor is %d\n", fd);
    //  Writing file
    if (write(fd, buffer, strlen(buffer)) == -1)
        fatal("in main() while writing buffer to file");
    //  CLosing file
    if(close(fd) == -1)
        fatal("in main() while closing file");

    printf("Note has been saved.\n");
    free(buffer);
    free(datafile);

    getchar();
    return 0;
}

//A function to display an error message and then exit
void fatal(char *message) {
    char error_message[100];

    strcpy_s(error_message, sizeof(error_message), "[!!] Fatal Error ");
    strncat(error_message, message, 83);
    perror(error_message);
    exit(-1);
}

//An error-checked malloc() wrapper function
void *ec_malloc(unsigned int size) {
    void *ptr;
    ptr = malloc(size);
    if (ptr == NULL)
        fatal("in ec_malloc() on memory allocation");
    return ptr;
}

Также мне интересно, должен ли я использовать Linux, чтобы получить максимальную отдачу от этого исходного кода? Или VS 2015 хорош для моих конкретных приложений. Надеюсь, у меня есть смысл. Я все еще довольно зелен, когда дело доходит до кодирования, поэтому большинство этих понятий мне несколько чужды. Я открыт для всех советов, которые я могу получить. введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...