Могу ли я сделать анонимный поток в c? Я не хочу создавать новый файл в файловой системе, просто есть поток, который может использовать одна функция, в то время как другая может заразиться от него. Не C++, c.Анонимный поток в c
ответ
Возможно, вы ищете трубы.
Вперед Ваш STDOUT к трубе.
Тогда другое приложение будет читать из трубы.
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#define RDR 0
#define WTR 1
char ** parseargs(char *string);
int main(void){
char mode = 'r';
char prog[50] = "/bin/ps --version";
char **argv;
int p[2];
pid_t pid;
FILE *readpipe;
int pipein, pipeout;
char buf;
/* create the pipe */
if(pipe(p) != 0){
fprintf(stderr, "error: could not open pipe\n");
}
pipein = p[RDR];
pipeout = p[WTR];
if((pid = fork()) == (pid_t) 0){
close(pipein);
dup2(pipeout, 1);
close(pipeout);
if(execv(argv[0], argv) == -1){
fprintf(stderr, "error: failed to execute %s\n", argv[0]);
}
_exit(1);
}
close(pipeout);
readpipe = fdopen(pipein, &mode);
while(!feof(readpipe)){
if(1 == fread(&buf, sizeof(char), 1, readpipe)){
fprintf(stdout, "%c", buf);
}
}
return 0;
}
Упс, только что нашел ... возможно. tmpfile() возвращает текстовый файл *
Это правильный способ сделать это?
Да, tmpfile() является одним из способов сделать это. Тем не менее, я считаю, что tmpfile() в наши дни не одобряется из-за проблем с безопасностью.
Итак, вы должны использовать mkstemp в POSIX или tmpfile_s в Windows вместо tmpfile().
Однако все они будут создавать файлы в файловой системе. Они временны в том, что они «уходят», когда программа выходит.
Другой вариант, который не создает физический файл, - mmap().
Если вы работаете в Unix (или аналогичной ОС), вы хотите прочитать Руководство Beej по обмену Интерпроцессом Unix (это хорошо прочитано независимо от вашей ОС).
Посмотрите на Beej's Guides.
В быстром взгляде там я заметил несколько вещей, которые вы могли бы использовать с большей или меньшей работой (и с дополнительным созданием файла/ресурса):
- Трубой
- FIFOs
- Очереди сообщений
- сегментов разделяемой памяти
- памяти Подключенные файлы
- Unix Sockets
- 1. Анонимный класс, расширяющий поток в Java
- 2. Анонимный союз в C
- 3. C# анонимный метод в выражении if?
- 4. Простой анонимный метод в C#
- 5. Анонимный делегат C# в цикле
- 6. C# анонимный метод/блок?
- 7. C# передать анонимный параметр?
- 8. C# - Анонимный делегат
- 9. Как передать индексную переменную цикла for в анонимный поток/Runnable
- 10. Когда анонимный переход на C++?
- 11. C# анонимный тип foreach looping
- 12. Доступ анонимный Субъект C++ (cout)
- 13. словаря, где значение анонимный типа в C#
- 14. C# - преобразовать анонимный тип в наблюдаемый коллекцию
- 15. C# «Анонимный» тип списка, хранящийся в словаре
- 16. Делегаты/Анонимный метод в C# 2
- 17. Когда мне нужен анонимный класс в C++?
- 18. C# Linq Назначить анонимный тип в GroupBy
- 19. Рекурсия и анонимный метод в C#
- 20. Создать анонимный метод из строки в C#
- 21. Deserialize JSON строку в C# анонимный массив
- 22. Получить анонимный тип из Интернета в C#
- 23. Enum и анонимный перечисление в C++
- 24. Интерфейс, реализующий анонимный класс в C#?
- 25. Отменить подписку на анонимный метод в C#
- 26. Перебор StringDictionary используя анонимный тип в C#
- 27. Скопируйте анонимный общий список в анонимный массив
- 28. Отобразить анонимный и анонимный контент в виде
- 29. Программный поток в C
- 30. Строковый поток в C
, который все равно создаст файл ... –