mirror of https://github.com/buggins/dlangide.git
66 lines
1.6 KiB
D
66 lines
1.6 KiB
D
/* tty;exec disowntty */
|
|
//#include <sys/ioctl.h>
|
|
//#include <unistd.h>
|
|
//#include <stdio.h>
|
|
//#include <limits.h>
|
|
//#include <stdlib.h>
|
|
//#include <signal.h>
|
|
|
|
//import std.stdio;
|
|
import std.string;
|
|
import std.c.stdlib;
|
|
import core.thread;
|
|
import core.sys.posix.signal;
|
|
import core.sys.posix.sys.ioctl;
|
|
import core.sys.posix.unistd;
|
|
import core.sys.posix.stdio;
|
|
|
|
//extern(C) void signal(int sig, void function(int) );
|
|
//extern(C) void setbuf(FILE * stream, char * buf);
|
|
//extern(C) void ioctl(int fd, uint request, int param);
|
|
|
|
void end(string msg)
|
|
{
|
|
perror(msg.toStringz);
|
|
for (;;)
|
|
Thread.sleep(dur!"seconds"(1));
|
|
}
|
|
|
|
alias extern(C) void function(int) sigfn_t;
|
|
|
|
void main(string args[])
|
|
{
|
|
FILE *tty_name_file;
|
|
if (args.length < 2)
|
|
exit(1);
|
|
|
|
string tty_filename = args[1];
|
|
|
|
sigfn_t orig;
|
|
setbuf (stdout, null);
|
|
orig = signal (SIGHUP, SIG_IGN);
|
|
if (orig !is SIG_DFL)
|
|
end ("signal (SIGHUP)");
|
|
|
|
printf("%s %s\n", tty_filename.toStringz, ttyname(STDIN_FILENO));
|
|
tty_name_file = fopen(tty_filename.toStringz, "w");
|
|
fprintf(tty_name_file, "%s\n", ttyname(STDIN_FILENO));
|
|
fclose(tty_name_file);
|
|
|
|
/* Verify we are the sole owner of the tty. */
|
|
if (ioctl(STDIN_FILENO, TIOCSCTTY, 0) != 0)
|
|
end ("TIOCSCTTY");
|
|
|
|
printf("%s %s\n", tty_filename.toStringz, ttyname(STDIN_FILENO));
|
|
tty_name_file = fopen(tty_filename.toStringz, "w");
|
|
fprintf(tty_name_file, "%s\n", ttyname(STDIN_FILENO));
|
|
fclose(tty_name_file);
|
|
|
|
/* Disown the tty. */
|
|
if (ioctl (STDIN_FILENO, TIOCNOTTY) != 0)
|
|
end ("TIOCNOTTY");
|
|
end ("OK, disowned");
|
|
|
|
exit(1);
|
|
}
|