Системный вызов, получающий значение мусора в файле

#c #system-calls

#c #системные вызовы

Вопрос:

Я пытаюсь записать в файл с помощью системного вызова write, путь к файлу проходит через строку cmd arg. Я получаю некоторую мусорную ценность, и я не могу понять, почему это происходит.

 #include lt;stdio.hgt; #include lt;fcntl.hgt; #include lt;stdlib.hgt; #include lt;unistd.hgt;  #define FOUR 4  void odd_no (int fd) {  for (int i = 0; i lt; 20; i  )  {  if (i % 2 != 0)  {  write (fd, amp;i,FOUR);  }    } }  int main (int argc, char *argv[]) {  int fd;  if (argc lt; 2)  {  printf ("Insufficient Argumentsn");  return 0;  }   if ((fd = open (argv[1], O_WRONLY, S_IRWXU)) != -1)  {  odd_no (fd);  close (fd);  }  else  {  perror ("open");  exit(1);  }  return 0; }  

Комментарии:

1. » Я получаю какую-то мусорную ценность » какие ценности вы ожидаете? Как вы определили, что значения, которые вы получаете, являются мусором? Как вы извлекли значения с помощью read или открыли этот файл в текстовом редакторе? Не забывайте, что вы записываете в этот файл двоичные данные, а не текст.

2. Хорошо, я просто пишу вместо того, чтобы открывать в программе, которую я открываю в текстовом редакторе, но когда я записываю символ в файл, он отлично отображается в текстовом редакторе.

3. Вы записываете в файл двоичные данные, а не текст. Вы можете просмотреть это только с помощью шестнадцатеричного редактора. Вам нужен двоичный файл или текст в выходном файле?

4. Для текста, который вы хотите fopen/fprintf