#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <syslog.h>
#include <string.h>
#include <dirent.h>
void shutdown() {
system("shutdown -P 1 &");
}
int searchForFile(char* fname, char* parent_dir) {
char filenm[256 * 1024];
int found = 0;
DIR *mydir = opendir(parent_dir);
struct dirent *entry = NULL;
struct dirent *entry2 = NULL;
while ((entry = readdir(mydir))) {
if ((strcmp(entry->d_name, ".") != 0) && (strcmp(entry->d_name, "..")
!= 0) && (entry->d_type == DT_DIR)) {
strcpy(filenm, parent_dir);
strcat(filenm, "/");
strcat(filenm, entry->d_name);
DIR *mydir2 = opendir(filenm);
while ((entry2 = readdir(mydir2))) {
if (strcmp(entry2->d_name, fname) == 0) {
found = 1;
}
}
closedir(mydir2);
}
}
closedir(mydir);
return found;
}
int main(void) {
int dontstop = 1;
pid_t pid, sid;
pid = fork();
if (pid < 0) {
exit(EXIT_FAILURE);
}
if (pid > 0) {
exit(EXIT_SUCCESS);
}
umask(0);
sid = setsid();
if (sid < 0) {
exit(EXIT_FAILURE);
}
if ((chdir("/")) > 0) {
exit(EXIT_FAILURE);
}
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
while (dontstop) {
int found = searchForFile("letsGoToSleepMySheeva.command", "/media");
if (found > 0) {
shutdown();
dontstop = 0;
}
sleep(10);
}
exit(EXIT_SUCCESS);
}
- szebeni blogja
- A hozzászóláshoz be kell jelentkezni
- 719 megtekintés
Hozzászólások
Hat ezt egy sima bash script is meg tudná csinálni. Viszont sokkal viccesebb lenne, ha a file létrehozás eseményét figyelné a service, és amint létrejön a file, azonnal leállna.
- A hozzászóláshoz be kell jelentkezni
es honnan jonne letre a file?
Itt csak radugom a pendriveot a cuccra, es leall.
Bash-hoz kevesebb affinitasom van, szamomra nehez a szintakszisa, ezert lett c.
---
return NEVER;
Ubuntu 8.10
HP nx6110
https://www.getdropbox.com/referrals/NTI3OTI2NzY5
www.tszebeni.hu
- A hozzászóláshoz be kell jelentkezni
Pedig ez shell scriptben joval egyszerubb.
#!/bin/bash
while true
do
if [ -x /media/bigyo/speckofile ]
then
halt
fi
sleep 30
done
Ha valami mini rendszer van rajta, akkor a bash helyett valami kisebb shell is elofordulhat - ebben az esetben elkepzelheto, hogy kell alakitani (pl: true helyett /bin/true, a [] helyett test, a -x nem biztos, hogy ismert, de jo helyette a -f is ebben a helyzetben, halt helyett shutdown -h now).
Ezen kivul meg lehetne szepiteni, mondjuk a file-t megkeresheti find-dal (ha nem mindig ugyanabban a konyvtarban van).
--
"You will have to look a long way before you find a bunch of scum-suckers more greedy, humourless and deserving of death than the suits in the music business." - Terry Pratchett
- A hozzászóláshoz be kell jelentkezni
a fajlt inotify vagy linuxon mi van kutyafulevel nezhetned hogy modosul-e es akkor instant reagalna
--
NetBSD - Simplicity is prerequisite for reliability
- A hozzászóláshoz be kell jelentkezni
Jep, nagyon franko dolog, ha mas nem funbol is probald ki.
- A hozzászóláshoz be kell jelentkezni
Gondolkoztam rajta, h ez is egy megoldas lenne, tenyleg ki fogom probalni este.
---
return NEVER;
Ubuntu 8.10
HP nx6110
https://www.getdropbox.com/referrals/NTI3OTI2NzY5
www.tszebeni.hu
- A hozzászóláshoz be kell jelentkezni
Az inotify igen hasznos szoftver, de szerintem erre a celra nem jo, mert emlekeim szerint nem ismer olyan esemenyt, hogy "xy file system mounted", a file pedig nem valtozik attol, hogy felmountolsz egy filerendszert...
(De javitsatok ki, ha megis tud ilyet!)
- A hozzászóláshoz be kell jelentkezni
Letrejon egy device a /dev alatt, ami egyben file is.
- A hozzászóláshoz be kell jelentkezni
Egyebkent probaltam beloni a desktopomon egy fordito kornyezetet arm architekturara, de nem sok sikerrel jartam, ugyhogy a forrast masoltam a ket eszkoz kozott, es arm-re vegul a sheeva sajat gcc-jet hasznaltam. Ha esetleg van valaki, aki ebben a temaban jaratos, adhatna nehany tanacsot, a google-ban nem sok aktualis informaciot talaltam, nagyreszt csak elavultat. (Kesobbiekben szeretnek komplexebb szolgaltatasokat is irni a cuccra, es lehetoleg c-ben) (talaltam a gnuarm.org-on binarisokat, letoltottem, kicsomagoltam, futtattam, egyedul arm7-es cpu-ra sikerult, armv5tejl-re nem (sem armv5,arm5-re)).
---
return NEVER;
Ubuntu 8.10
HP nx6110
https://www.getdropbox.com/referrals/NTI3OTI2NzY5
www.tszebeni.hu
- A hozzászóláshoz be kell jelentkezni
Esetleg egy otlet: ha van udev-ed a cuccon, akkor annak meglehet modani, hogy futtasson le egy scriptet amikor megjelenik egy eszkoz.
Igy meg vendorid:productid alapjan csak a te pendriveodat fogja elfogadni.
--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni