수정할 수없는 프로그램은 인수로 제공된 파일에 출력합니다. 불필요한 디스크 입출력을 수행 할 필요가 없도록 출력을 RAM에 저장하려고합니다. 필자는 tmpfs를 사용하여 프로그램을 "trick"하여 쓸 수 있다고 생각했지만, 모든 리눅스 배포판이/tmpfs에 tmpfs를 사용하지는 않지만/dev/shm (RedHat)에서는/tmpfs를/run (우분투)에서 사용합니다. 가능한 한 이식성이 좋은 프로그램을 만들고 싶습니다. 사용자 시스템에 tmpfs 파일 시스템을 만들지 않으려 고합니다. 분명히 나는 df | grep tmpfs를 사용하고 반환하는 마운트를 사용합니다.하지만 좀 더 우아한 것을 기대했습니다. 가짜 터미널이나/proc 어딘가에 쓸 수 있습니까?Linux에서 파일을 RAM에 쓰는 방법
답변
자식 프로세스가 찾을 수없는 파일을 허용하는 경우 try named pipes 수 있습니다. 명명 된 파이프의 내용은 디스크를 만지지 않습니다.
스레드 프로그램으로 작성했습니다. 파이프를 만들고 두 번째 프로그램을 호출하는 스레드를 만들고 주 스레드를 만듭니다. thread는 파이프를 열어서 unblock하고 다른 프로세스의 데이터를 얻는다. 꽤 잘 작동합니다. – ventsyv
파이썬 스크립트를 두 부분으로 나눌 수 있습니다. 하나는 반복적으로 다른 프로그램을 호출하고 다른 하나는 결과를 병합하고 두 번째 부분은 Bash 스크립트로 변환하여 >()
프로세스 대체 구조를 사용하여 의사를 전달할 수 있습니다 파일을 다른 프로그램의 stdin 인 다른 프로그램에 추가하십시오.
의 PoC : 그것은 인수에 파일 이름을 소요하고 여기에 '안녕하세요'를 기록
$ cat otherprogram.py
#/usr/bin/env python
import sys
with open(sys.argv[1], 'w') as file:
file.write('Hello\n')
:
이있는 다른 프로그램을 가정합니다. 5 번 전화해야한다고 가정합니다.
for i in {1..5}; do python otherprogram.py >(cat) ; done
출력 otherprogram.py
이 파일에 쓰기 어떻게 생각하는지 표준 출력됩니다 : 그럼 당신은 이런 식으로 뭔가를 할 수 있습니다. 당신은 다음과 같이 파이썬 스크립트의 다른 부분을 소비 할 수 있습니다 :
$ cat consume.py
#!/bin/env python
import fileinput
for line in fileinput.input():
print "Processing line ", line
$ { for i in {1..5}; do python otherprogram.py >(cat) ; done } | python consume.py
Processing line Hello
Processing line Hello
Processing line Hello
Processing line Hello
Processing line Hello
그래서 otherprogram.py
이가 쓰고 어떻게 생각하는지 (이것은 단순히 '안녕하세요'에 뭔가를 앞에 추가) 파일은 Bash의 프로세스 분리 메커니즘 덕분에 실제로 디스크를 치지 않고 프로그램의 표준 입력을 전송합니다.
/proc/self/fd/1
을 하위 프로그램의 파일 이름으로 전달하십시오. /proc/self/fd/1
에 대한 모든 쓰기는 실제로 하위 프로그램의 stdout으로 이동합니다. 자녀의 표준 출력을 캡처하려면 subprocess.Popen()
등을 사용하십시오.
모든 Linux 버전에서 작동해야하며 프로그램을 실행하는 사용자는 항상 파일 맞지? – ventsyv
아마 각각 예, 그렇습니다. –
@ user2036161 -이 기술의 이식성에 대한 설명은 다음과 같습니다. http://unix.stackexchange.com/questions/123602/portability-of-file-descriptor-links –
- 1. 안드로이드에서 RAM에 파일을 읽고 쓰려면
- 2. Linux에서 Python을 사용하여 .sit 파일을 읽거나 쓰는 방법
- 3. 큰 파일을 정렬하는 방법 (RAM에 적합하지 않음)
- 4. 메이크 파일을 쓰는 방법
- 5. 루아에서 파일을 쓰는 방법?
- 6. 부분 파일을 쓰는 방법?
- 7. 터미널 출력을 변수 (java에서 python으로) - 파일을 쓰는 대신 RAM에 출력하는 최상의 코딩 방법
- 8. Android. RAM에 캐시를 유지하는 방법?
- 9. linux에서 부팅 할 때 파일을 덮어 쓰는 방법은 무엇입니까?
- 10. 응용 프로그램에서 RAM에 쓰는 것이 간단하게 어떻게 작동합니까?
- 11. 자바 : 바이너리 파일을 쓰는 방법?
- 12. 봄 - classpath에 파일을 쓰는 방법?
- 13. 텍스트 파일을 쓰는 방법 Java
- 14. 파일을 작성하여 URL에 쓰는 방법
- 15. 인코딩으로 BSTR에 파일을 쓰는 방법?
- 16. csv 파일을 덮어 쓰는 방법
- 17. Mono에서 파일을 읽고 쓰는 방법
- 18. 특정 파일에 파일을 쓰는 방법
- 19. .mdf 파일을 덮어 쓰는 방법
- 20. httpresponse에 zip 파일을 쓰는 방법
- 21. 먼저 파일을 읽고 쓰는 방법
- 22. 디버그 기호 파일을 RAM에 둘 수 있습니까?
- 23. bash를 사용하여 RAM에 파일을 저장할 수 있습니까?
- 24. 파일을 읽고 프롤로그에 다른 파일을 쓰는 방법
- 25. Linux에서 가상 웹캠에 쓰는 방법은 무엇입니까?
- 26. Linux에서 I2C를 사용하여 읽거나 쓰는 중
- 27. Linux에서 DMA에 액세스하는 방법
- 28. NSURL을 메모리 RAM에 저장
- 29. Linux에서 Java로 Jar 파일을 추가하는 방법
- 30. Linux에서 매우 큰 파일을 삭제하는 방법
어쨌든 Linux의 디스크 캐시로 인해 RAM에 저장됩니다. –
이 질문에'python' 태그가 붙어있어서'stringIO'는 어떨까요? 기본적으로 문자열 변수를 파일로 사용할 수 있습니다. – kindall
작성중인 프로그램이거나 이미 수정할 수없는 프로그램으로 작성된 프로그램입니까? 귀하의 질문은이 문제에 모순됩니다. – duskwuff