Есть ли способ узнать, открыт ли файл другим приложением в PHP Java?Как я могу сказать, что файл открывается другим приложением?
ответ
Команда fuser -v filename
расскажет вам все, что вам нужно знать:
$ fuser -v test.php
USER PID ACCESS COMMAND
test.php: guest 17983 F.... cat
Вы, вероятно, хотите использовать файл блокировки.
http://tuxradar.com/practicalphp/8/11/0
Edit: Это предполагая, что вы имели в виду с PHP программно или Java.
В linux вы можете сканировать все дескрипторы файла/proc/{pid}/fd/nnn, чтобы узнать, открыт ли этот файл.
Использование файлов для обмена данными между запущенными программами, как правило, является плохой идеей и склонностью к ошибкам.
Я бы сказал Нет. Пожалуйста, прочитайте эти темы.
На окнах вы можете скачать handle, который является инструментом командной строки, чтобы определить, какие окна файл ручки принадлежат который обрабатывает.
Выход выглядит следующим образом:
Handle v3.46
Copyright (C) 1997-2011 Mark Russinovich
Sysinternals - www.sysinternals.com
------------------------------------------------------------------------------
System pid: 4 NT AUTHORITY\SYSTEM
84: File (R--) C:\System Volume Information\_restore{5D536487-92AI-5I25-9237-28AHSOU23728}\RP425\change.log
B4: File (RWD) C:\Documents and Settings\All Users\Application Data\avg9\Log\avgldr.log
728: File (-W-) C:\pagefile.sys
7A4: File (---) C:\WINDOWS\system32\config\SECURITY
(etc...)
Вот пример приложения, которое использует Handle.exe, чтобы определить, есть ли дескриптор файла или каталога (только для Windows):
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* Application which determines which processes have a handle on a file or
* directory. Pass the file or directory to check as the first application
* parameter.
*
* This application uses handle.exe, which can be downloaded here:
* http://technet.microsoft.com/en-us/sysinternals/bb896655
*
* Copy handle.exe to C:/Program Files/handle/
*
* For the Runtime.exec() code I looked at:
* http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=2
*
* @author Adriaan
*/
public class Handle {
private static final String HANDLE_PATH = "C:/Program Files/handle/handle.exe";
private static final String DEFAULT_TARGET = "C:\\WINDOWS";
public static void main(String[] args) throws IOException,
InterruptedException {
checkOS();
String fileName = getFileName(args);
Process proc = executeCommand(fileName);
readResults(fileName, proc);
checkTermination(proc);
}
private static void checkOS() {
String osName = System.getProperty("os.name");
if (!osName.contains("Windows")) {
throw new IllegalStateException("Can only run under Windows");
}
}
private static String getFileName(String[] args) {
String fileName;
if (args != null && args.length > 0) {
fileName = args[0];
} else {
fileName = DEFAULT_TARGET;
}
return fileName;
}
private static Process executeCommand(String fileName) throws IOException {
String[] cmd = new String[] { HANDLE_PATH, fileName };
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(cmd);
return proc;
}
private static void readResults(final String fileName, final Process proc) {
Thread errorHandler = new Thread() {
public void run() {
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(proc.getErrorStream()));
String line = null;
while ((line = br.readLine()) != null) {
System.err.println(line);
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
};
Thread outputHandler = new Thread() {
public void run() {
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(proc.getInputStream()));
String line = null;
while ((line = br.readLine()) != null) {
if (line.endsWith(fileName)) {
System.out.println(line);
}
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
};
errorHandler.start();
outputHandler.start();
}
private static void checkTermination(final Process proc)
throws InterruptedException {
int exitVal = proc.waitFor();
if (exitVal != 0) {
throw new IllegalStateException("Exitvalue " + exitVal);
}
}
}
- 1. Как сказать, какой файл данных открывается приложением
- 2. Как я могу общаться с другим приложением?
- 3. Как проверить, что файл не открывается другим процессом?
- 4. Как проверить, используется ли файл другим приложением?
- 5. IOS как читать файл, созданный другим приложением
- 6. Как я могу открыть приложение Android с другим приложением?
- 7. Как я могу докнуть мое приложение winform с другим приложением
- 8. Что я могу сказать об инициализации устройства?
- 9. Как узнать, какой файл открывается приложением в любое время?
- 10. Как я могу сказать, что я компилирую на Mac?
- 11. Как я могу сказать «центр безопасности Windows», что я «антивирус»?
- 12. msoFileDialogFilePicker открывается за активным приложением
- 13. Что такое правильный способ сказать «#» другим разработчикам
- 14. JQuery - когда нажата кнопка, как я могу сказать, что функция работает/занята, и как я могу сказать, что функция выполнена?
- 15. Что я пытаюсь сказать?
- 16. Как я могу сказать, что поток был прочитан до конца?
- 17. Камера используется другим приложением
- 18. Как я могу сказать, что мой скрипт php запускает один набор уравнений над другим
- 19. Как я могу убедиться, что я могу читать файл и его не заблокировать другим процессом
- 20. Android - Открыть файл с другим конкретным приложением
- 21. Как я могу сказать, если кто-то подделывает файл? (PHP)
- 22. как я могу сказать cgo, чтобы не компилировать файл?
- 23. Как я могу сказать, требует ли .PFX файл пароля
- 24. Как я могу сказать Hexo игнорировать файл при создании сообщений?
- 25. Как я могу подождать приложения, запущенного другим приложением, запущенным моим приложением Qt/C++
- 26. Как я могу сообщить своей базе данных, что некоторые изменения сделаны спящим, а не другим приложением?
- 27. Получить .apk другим приложением
- 28. Как я могу сказать, что приложение Google App Engine остановилось?
- 29. Как я могу сказать Swashbuckle, что содержание тела требуется?
- 30. Как я могу сказать, что выполнение скрипта не удалось?
Почему это актуально? –