Брайан Керниган - UNIX — универсальная среда программирования

Здесь есть возможность читать онлайн «Брайан Керниган - UNIX — универсальная среда программирования» — ознакомительный отрывок электронной книги совершенно бесплатно, а после прочтения отрывка купить полную версию. В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 1992, ISBN: 1992, Издательство: Финансы и статистика, Жанр: ОС и Сети, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

UNIX — универсальная среда программирования: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «UNIX — универсальная среда программирования»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями
.
Для программистов-пользователей операционной системы UNIX.

UNIX — универсальная среда программирования — читать онлайн ознакомительный отрывок

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «UNIX — универсальная среда программирования», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

char buf[BUFSIZ], *mktemp();

char *diffout = "idiff.XXXXXX";

progname = argv[0];

if (argc != 3) {

fprintf(stderr, "Usage: idiff file1 file2\n");

exit(1);

}

f1 = efopen(argv[1], "r");

f2 = efopen(argv[2], "r");

fout = efopen("idiff.out", "w");

mktemp(diffout);

sprintf(buf, "diff %s %s >%s", argv[1], argv[2], diffout);

system(buf);

fin = efopen(diffout, "r");

idiff(f1, f2, fin, fout); unlink(diffout);

printf("%s output in file idiff.out\n", progname);

exit(0);

}

idiff(f1, f2, fin, fout) /* process diffs */

FILE *f1, *f2, *fin, *fout;

{

char *tempfile = "idiff.XXXXXX";

char buf[BUFSIZ], buf2[BUFSIZ], *mktemp();

FILE *ft, *efopen();

int cmd, n, from1, to1, from2, to2, nf1, nf2;

mktemp(tempfile);

nf1 = nf2 = 0;

while (fgets(buf, sizeof buf, fin) != NULL) {

parse(buf, &from1, &to1, &cmd, &from2, &to2);

n = to1-from1 + to2-from2 + 1; /* #lines from diff */

if (cmd == 'c')

n += 2;

else if (cmd == 'a')

from1++;

else if (cmd == 'd')

from2++;

printf("%s", buf);

while (n-- > 0) {

fgets(buf, sizeof buf, fin);

printf("%s", buf);

}

do {

printf("? ");

fflush(stdout);

fgets(buf, sizeof buf, stdin);

switch (buf[0]) {

case '>':

nskip(f1, to1-nf1);

ncopy(f2, to2-nf2, fout);

break;

case '<':

nskip(f2, to2-nf2);

ncopy(f1, to1-nf1, fout);

break;

case 'e':

ncopy(f1, from1-1-nf1, fout);

nskip(f2, from2-1-nf2);

ft = efopen(tempfile, "w");

ncopy(f1, to1+1-from1, ft);

fprintf(ft, "--- \n");

ncopy(f2, to2+1-from2, ft);

fclose(ft);

sprintf(buf2, "ed %s", tempfile);

system(buf2);

ft = efopen(tempfile, "r");

ncopy(ft, HUGE, fout);

fclose(ft);

break;

case '!':

system(buf+1);

printf("!\n");

break;

default:

printf("< or > or e or !\n");

break;

}

} while (buf[0]!= '<' && buf[0]!= '>' && buf[0]! = 'e');

nf1 = to1;

nf2 = to2;

}

ncopy(f1, HUGE, fout); /* can fail on very long files */

unlink(tempfile);

}

parse(s, pfrom1, pto1, pcmd, pfrom2, pto2)

char *s;

int *pcmd, *pfrom1, *pto1, *pfrom2, *pto2;

{

#define a2i(p) while (isdigit(*s)) \

p = 10*(p) + *s++ - '0'

*pfrom1 = *pto1 = *pfrom2 = *pto2 = 0;

a2i(*pfrom1);

if (*s == ',') {

s++;

a2i(*pto1);

} else

*pto1 = *pfrom1;

*pcmd = *s++;

a2i(*pfrom2);

if (*s == ',') {

s++;

a2i(*pto2);

} else

*pto2 = *pfrom2;

}

nskip(fin, n) /* skip n lines of file fin */

FILE *fin;

{

char buf[BUFSIZ];

while (n-- > 0)

fgets(buf, sizeof buf, fin);

}

ncopy(fin, n, fout) /* copy n lines from fin to fout */

FILE *fin, *fout;

{

char buf[BUFSIZ];

while (n-- > 0) {

if (fgets(buf, sizeof buf, fin) == NULL)

return;

fputs(buf, fout);

}

}

#include "efopen.c"

3.8.28 makefile

files: files.o files1.o directory.o

cc files.o files1.o directory.o -o files

p0: p0.c ttyin0.c

cc p0.c ttyin0.c

clean:

rm -f *.o a.out

3.8.29 newer

# newer f: list files newer than f

ls -t | sed '/^'$1'$/q'

3.8.30 news1

# news: print news files, version 1

HOME=. # debugging only

cd . # place holder for /usr/news

for i in `ls -t * $HOME/.news_time`

do

case $i in

*/.news_time) break ;;

*) echo news: $i

esac

done

touch $HOME/.news_time

3.8.31 news2

# news: print news files, version 2

HOME=. # debugging only

cd . # place holder for /usr/news

IFS='

' # just a newline

for i in `ls -t * $HOME/.news_time 2>&1`

do

case $i in

*' not found') ;;

*/.news_time) break ;;

*) echo news: $i ;;

esac

done

touch $HOME/.news_time

3.8.32 news3

# news: print news files, final version

PATH=/bin:/usr/bin

IFS='

' # just a newline

cd /usr/news

for i in `ls -t * $HOME/.news_time 2>&1`

do

IFS=' '

case $i in

*' not found') ;;

*/.news_time) break ;;

*) set X`ls -l $i`

echo "

$i: ($3) $5 $6 $7

"

cat $i

esac

done

touch $HOME/.news_time

3.8.33 nohup

trap "" 1 15

if test -t 2>&1

then

echo "Sending output to 'nohup.out'"

exec nice -5 $* >>nohup.out 2>&1

else

exec nice -5 $* 2>&1

fi

3.8.34 older

# older f: list files older than f

ls -tr | sed '/^'$!'$/q'

3.8.35 overwrite1

# overwrite: copy standard input to output after EOF

# version 1. BUG here

PATH=/bin:/usr/bin

case $# in

1) ;;

*) echo 'Usage: overwrite file' 1>&2; exit 2

esac

new=/tmp/overwr.$$

trap 'rm -f $new; exit 1' 1 2 15

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «UNIX — универсальная среда программирования»

Представляем Вашему вниманию похожие книги на «UNIX — универсальная среда программирования» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «UNIX — универсальная среда программирования»

Обсуждение, отзывы о книге «UNIX — универсальная среда программирования» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x