системный вызов write пишет какие-то нечитабельные символы в файл

системный вызов write пишет какие-то нечитабельные символы в файл

09.06.2017 11:22:31 Просмотров 30 Источник

вот программа:

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

int main(int argc, const char* argv[]) {
    if (argc != 3) {
         fprintf(stderr, "Использование: %s <файл> <текст для добавления>\n", argv[0]);
         exit(EX_USAGE);
    }

    FILE* f = open(argv[1], O_WRONLY | O_APPEND);
    write((long int)f, &argv[2], strlen(argv[2]));
    close((ssize_t)f);

    return 0; 
}

она пишет какие-то нечитабельные символы в файл.

как побороть?

и да, предупреждение компилятора тоже неплохо бы починить...

вот как он ругается:

append.c: В функции «main»:
append.c:14:12: предупреждение: при инициализации целое преобразуется в 
указатель без приведения типа [-Wint-conversion]
   FILE* f = open(argv[1], O_WRONLY | O_APPEND);
             ^
У вопроса есть решение - Посмотреть?

https://ru.stackoverflow.com/questions/677500/%d1%81%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d0%bd%d1%8b%d0%b9-%d0%b2%d1%8b%d0%b7%d0%be%d0%b2-write-%d0%bf%d0%b8%d1%88%d0%b5%d1%82-%d0%ba%d0%b0%d0%ba%d0%b8%d0%b5-%d1%82%d0%be-%d0%bd%d0%b5%d1%87%d0%b8%d1%82%d0%b0%d0%b1%d0%b5%d0%bb%d1%8c%d0%bd%d1%8b%d0%b5-%d1%81%d0%b8%d0%bc%d0%b2%d0%be%d0%bb%d1%8b-%d0%b2-%d1%84%d0%b0%d0%b9%d0%bb#comment990591_677500
Компилятор правильно ругается. Так как open() возвращает целое число. Вы уверены, что хотите использовать не fopen ?
https://ru.stackoverflow.com/questions/677500/%d1%81%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d0%bd%d1%8b%d0%b9-%d0%b2%d1%8b%d0%b7%d0%be%d0%b2-write-%d0%bf%d0%b8%d1%88%d0%b5%d1%82-%d0%ba%d0%b0%d0%ba%d0%b8%d0%b5-%d1%82%d0%be-%d0%bd%d0%b5%d1%87%d0%b8%d1%82%d0%b0%d0%b1%d0%b5%d0%bb%d1%8c%d0%bd%d1%8b%d0%b5-%d1%81%d0%b8%d0%bc%d0%b2%d0%be%d0%bb%d1%8b-%d0%b2-%d1%84%d0%b0%d0%b9%d0%bb#comment990594_677500
такая задача. как вообще с open работать? @retorta

Ответы - системный вызов write пишет какие-то нечитабельные символы в файл / системный вызов write пишет какие-то нечитабельные символы в файл

user232384

10.06.2017 01:23:22

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

int main(int argc, const char* argv[]) {
    if (argc != 3) {
         fprintf(stderr, "Использование: %s <файл> <текст для добавления>\n", argv[0]);
         exit(EX_USAGE);
    }

    int fd = open(argv[1], O_WRONLY | O_APPEND);
    write(fd, argv[2], strlen(argv[2]));
    close(fd);

    return 0; 
}

надо было типом int объявлять дескриптор... теперь все работает и я понимаю, чем fopen отличается от open...

Является ответом!
mymedia

10.06.2017 01:52:33

Системный вызов open возвращает целое — номер файлового дескриптора — и имеет следующий интерфейс:

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

open возвращает новый описатель файла или -1 в случае ошибки (в этом случае значение переменной errno устанавливается должным образом).

Так описано на странице руководства open(2).

В вашем коде вы присваиваете результат этого вызова указателю на структуру FILE. Вероятно, вы перепутали означенную функцию с библиотечной fopen(3).

Закрыть X