Закрытие/чистка “смешанных” дескрипторов файлов / сокеты

Если у вас достаточно памяти, наиболее эффективным способом является объединение всех их вместе, а затем запись в файл:

df <- cbind(df1, df2, df3)
write.csv(df, "spam.csv")

В противном случае вы можете использовать аргумент append в write.csv:

dfs <- c(df1, df2, df3)
for (df in dfs){
  write.csv(df, "eggs.csv", append = TRUE)
}
6
задан jkramer 20 September 2008 в 12:38
поделиться

3 ответа

От человека fdopen:

Дескриптор файла не является dup’ed и будет закрыт, когда поток, созданный fdopen (), закрывается

Таким образом, я просто использовал бы fclose (), который также закрывает базовый дескриптор файла. Я не знаю, необходимо ли завершение работы (), также.

5
ответ дан 17 December 2019 в 00:17
поделиться

Из http://opengroup.org/onlinepubs/007908775/xsh/fclose.html

fclose () функция выполнит завершение () на дескрипторе файла, который связан с потоком, на который указывает поток.

При обертывании сокета в поток, вероятно, больше не имеет смысл завершать работу (), по крайней мере, не сбрасывая поток сначала. Но я не поклянусь этому, потому что я не знаю, что нет никакого использования, где Вы хотели бы завершить работу (), а не просто закрыться ().

3
ответ дан 17 December 2019 в 00:17
поделиться

У Вас есть 2 вещи здесь, необходимо вымыться: поток, представленный FILE и дескриптор файла представлен сокетом. Необходимо закрыть поток сначала, затем дескриптор файла. Так, в целом Вы должны будете fclose() любой FILE объекты, затем close() любые дескрипторы файлов.

Лично я никогда не использовал shutdown() когда я хочу к очистке после меня, таким образом, я не могу сказать.

править

Другие правильно указали на это fdclose() также закроет базовый дескриптор файла, и начиная с вызова close() на близком дескрипторе файла приведет к ошибке, в этом случае Вам только нужно fdclose().

-1
ответ дан 17 December 2019 в 00:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: