Позволяют перейти от адреса Internet в форме символов (состояние,в котором он находился в файле / etc / hosts ) к адресу в форме 4-х байтов и наоборот. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Позволяют перейти от адреса Internet в форме символов (состояние,в котором он находился в файле / etc / hosts ) к адресу в форме 4-х байтов и наоборот.



u_long inet_addr (адрес) char *адрес /*адрес в ASCII-символах*/

char *inet_ntoa (inadresse) struct in_addr inadresse; /*адрес в форме целого*/

Считывание и запись Примитивы readv() и writev() позволяют осуществлять считывание и запись c помощью нескольких несмежных буферов. Этим можно пользоваться, например, для записи общего заголовка, находящегося в постоянном буфере и данных, находящихся в переменном буфере. Эти два примитива не характерны для сокетов. Примитивы sendmsg() и recvmsg() позволяют осуществлять считывание и запись в самом общем виде и используются со всеми опциями.

Управление окончанием соединения Функция shutdown () позволяет управлять окончанием соединения.

int shutdown () (sock, controle) int sock;/*сокет-дескриптор*/ int controle; Аргумент controle может принимать следующие значения: 0: больше нельзя получать данные на сокете; 1: больше нельзя посылать данные на сокет; 2: больше нельзя ни посылать, ни принимать данные на сокет.

Определение параметров сокета Параметры сокетов устанавливаются примитивом setsockopt(). Для установки некоторых опций можно использовать также функции fcntl () или ioctl (). Текущие значения параметров можно определить с помощью примитива getsockopt (). Пример:

##### Client ######### #include <sys/type.h> #include <sys/socket.h> #include <netinet/in.h> main()     { int sd; struct sockaddr_in tss_addr; sd=socket(AF_INET,SOCK_STREAM,0); tss_addr.sin_family=AF_INET;      tss_addr.sin_port=htons(45000); //номер порта tss_addr.sin_addr.s_addr=inet_addr("127.0.0.1"); connect(sd,&tss_addr,sizeof(tss_addr)); write(sd, ”hello”,6);   } ##### Server ######### main() { int sd, ns; int buf_ben; char buff[256]; struct sockaddr_in s; struct sockaddr_in c; int c_len; sd=socket(AF_INET, SOCK_STREAM, 0); s.sin_family = AF_INET; s.sin_port = htons(45000); s.sin_addr.s_addr=inet_addr("127.0.0.1"); bind(sd,&s,sizeof(s)); listen(sd,1); for(;;) ns = accept(sd, &s, &c_len) if (fork()==0) {   close(sd);   read(ns, buff,256);   printf("%s",buff);     exit(1);      } close(ns);     }    }

Протокол UDP. Поскольку для обмена датаграммами не нужно устанавливать соединение, использовать их гораздо проще. Создав сокет с помощью socket и bind, вы можете тут же использовать его для отправки или получения данных. Для этого вам понадобятся функции sendto и recvfrom.

int sendto(int sockfd, const void *msg, int len, unsigned int flags,const struct sockaddr *to, int tolen);

int recvfrom(int sockfd, void *buf, int len, unsigned int flags, struct sockaddr *from, int *fromlen);

Для задания адреса используется структура sockaddr, как и в случае с функцией connect. Функция recvfrom, Получив очередное сообщение, записывает его адрес в структуру, на которую ссылается from, а записанное количество байт - в переменную, адресуемую указателем fromlen. Как мы знаем, аналогичным образом работает функция accept.

Некоторую путаницу вносят присоединённые датаграммные сокеты (connected datagram sockets). Дело в том, что для сокета с типом SOCK_DGRAM тоже можно вызвать функцию connect, а затем использовать send и recv для обмена данными. Нужно понимать, что никакого соединения при этом не устанавливается. Операционная система просто запоминает адрес, который вы передали функции connect, а затем использует его при отправке данных. Обратите внимание, что присоединённый сокет может получать данные только от сокета, с которым он соединён.


10. Напишите сценарий для shell меняющий расширения в именах файлов текущего каталога '.c' на '.cc'

Вариант 1. ls *.c | sed 's/\(.*\)\.c/mv "\1\.c" "\1\.cc";/' | sh –x

Вариант 2.

for f in *.с

do

expr $f ([^.]*)\.c: | $a

   a = ‘expr $a + “.cc”‘

   mv $f $a

done

Вариант 3.

find./ -maxdepth 1 -mtime 0 -name "*.cc" -exec mv {} {}c \;

Вариант 4. Скрипт

#!/bin/bash

for i in `ls./*.c`; do

mv "${i}" "${i}c"

done

Одна команда

Следующая команда переименовывает все файлы в текущем каталоге, меняя первое сочетание ".c" на ".cc".

rename.c.cc *.c

Недостаток этого способа состоит в том, что если файлы имеют в своём имени сочетание ".c" (не в расширении), то переименование произойдёт неправильно. Подходит для простого переименования файлов в большинстве случаев.

 

 



Поделиться:


Последнее изменение этой страницы: 2019-05-20; просмотров: 64; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.149.24.159 (0.004 с.)