powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / пример из книги Стивенса Unix Network Programming
3 сообщений из 3, страница 1 из 1
пример из книги Стивенса Unix Network Programming
    #36900506
24spam@tut.by
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!

Есть немного изменённый пример из книги Стивенса.

Код вот такой

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
#include "unpipc.h"

int main(int argc, char** argv)
{
   int c, id, oflag;
   char* ptr;
   size_t length;
   
   oflag = SVSHM_MODE | IPC_CREAT;
   
   while ((c = Getopt(argc, argv, "e")) != - 1 )
   {
   
         switch(c)
         {
         
             case 'e':
                  oflag |= IPC_EXCL;
             break;
         }
   }
   if (optind != argc -  2 )
          err_quit("usage: shmget [ -e ] <pathname> <length>");
   length = atoi(argv[optind +  1 ]);

   id = Shmget(ftok(argv[optind],  0 ), length, oflag);
   ptr = shmat(id, NULL, 0 );
   exit( 0 );

}

Этот код использует хидер unpipc.h, который идёт ко всем примерам этой книги.

Сам хидер имеет следующий вид

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
//lib/unpipc.h

/* Íàø çàãîëîâî÷íûé ôàéë. */



#ifndef	__unpipc_h

#define	__unpipc_h



#include	"../config.h"	/* ïàðàìåòðû êîíôèãóðàöèè ÎÑ */

							/* "../config.h" ñîçäàåòñÿ ñöåíàðèåì configure */



/* èçìåíÿÿ ñïèñîê äèðåêòèâ #include, íóæíî èçìåíÿòü ôàéëû

   ../aclocal.m4 è ../configure.in, ÷òîáû ðàáîòàë ñöåíàðèé configure */



#include	<sys/types.h>	/* áàçîâûå òèïû äàííûõ */

#include	<sys/time.h>	/* ñòðóêòóðà timeval{} äëÿ select() */

#include	<time.h>		/* timespec{} äëÿ pselect() */

#include	<errno.h>

#include	<fcntl.h>		/* îòêëþ÷åíèå áëîêèðîâêè */

#include	<limits.h>		/* PIPE_BUF */

#include	<signal.h>

#include	<stdio.h>

#include	<stdlib.h>

#include	<string.h>

#include	<sys/stat.h>	/* êîíñòàíòû ðåæèìà äîñòóïà ê ôàéëó S_xxx */

#include	<unistd.h>

#include	<sys/wait.h>



#ifdef	HAVE_MQUEUE_H

# include	<mqueue.h>		/* î÷åðåäè ñîîáùåíèé Posix */

#endif



#ifdef	HAVE_SEMAPHORE_H

# include	<semaphore.h>	/* ñåìàôîðû Posix */



#ifndef	SEM_FAILED

#define	SEM_FAILED	((sem_t *)(- 1 ))

#endif



#endif



#ifdef	HAVE_SYS_MMAN_H

# include	<sys/mman.h>	/* ðàçäåëÿåìàÿ ïàìÿòü Posix */

#endif



#ifndef	MAP_FAILED

#define	MAP_FAILED	((void *)(- 1 ))

#endif



#ifdef	HAVE_SYS_IPC_H

# include	<sys/ipc.h>		/* System V IPC */

#endif



#ifdef	HAVE_SYS_MSG_H

# include	<sys/msg.h>		/* î÷åðåäè ñîîáùåíèé System V */

#endif



#ifdef	HAVE_SYS_SEM_H

#ifdef	__bsdi__

#undef	HAVE_SYS_SEM_H		/* òîíêèé ìîìåíò: ïðîòîòèï semctl() â BSDI's ñîäåðæèò îøèáêè*/

#else

# include	<sys/sem.h>		/* ñåìàôîðû System V */

#endif



#ifndef	HAVE_SEMUN_UNION

/* $$.It semun$$ */

union semun {				/* îïðåäåëåíèå îáúåäèíåíèÿ äëÿ semctl() */

  int              val;

  struct semid_ds *buf;

  unsigned short  *array;

};

#endif

#endif	/* HAVE_SYS_SEM_H */



#ifdef	HAVE_SYS_SHM_H

# include	<sys/shm.h>		/* ðàçäåëÿåìàÿ ïàìÿòü System V */

#endif



#ifdef	HAVE_SYS_SELECT_H

# include	<sys/select.h>	/* äëÿ óäîáñòâà */

#endif



#ifdef	HAVE_POLL_H

# include	<poll.h>		/* äëÿ óäîáñòâà */

#endif



#ifdef	HAVE_STROPTS_H

# include	<stropts.h>		/* äëÿ óäîáñòâà */

#endif



#ifdef	HAVE_STRINGS_H

# include	<strings.h>		/* äëÿ óäîáñòâà */

#endif



/* Ñëåäóþùèå òðè çàãîëîâî÷íûõ ôàéëà íóæíû äëÿ ioctl ôàéëîâ è ñîêåòîâ:

 * <sys/ioctl.h>, <sys/filio.h>, è <sys/sockio.h>.

 */

#ifdef	HAVE_SYS_IOCTL_H

# include	<sys/ioctl.h>

#endif

#ifdef	HAVE_SYS_FILIO_H

# include	<sys/filio.h>

#endif



#ifdef	HAVE_PTHREAD_H

# include	<pthread.h>

#endif



#ifdef	HAVE_DOOR_H

# include	<door.h>		/* èíòåðôåéñ äâåðåé Solaris */

#endif



#ifdef	HAVE_RPC_RPC_H

#ifdef _PSX4_NSPACE_H_TS	/* áàãè Digital Unix 4.0b */

#undef	SUCCESS

#endif

# include	<rpc/rpc.h>		/* Sun RPC */

#endif



/* Îïðåäåëÿåì bzero() êàê ìàêðîñ åñëè åãî íåò â ñòàíäàðòíîé áèáëèîòåêå Ñ */

#ifndef	HAVE_BZERO

#define	bzero(ptr,n)		memset(ptr,  0 , n)

#endif



/* Posix.1g òðåáóåò, ÷òîáû INFTIM îïðåäåëÿëîñü â <poll.h>, íî âî ìíîãèõ ñèñòåìàõ ýòà êîíñòàíòà âñå åùå îïðåäåëÿåòñÿ â <sys/stropts.h>. Íàì íå íóæíî ïîäêëþ÷àòü âñå ôóíêöèè äëÿ ðàáîòû ñ ïîòîêàìè, ïîýòîìó ìû îïðåäåëÿåì INFTM çäåñü. Ýòî ñòàíäàðòíîå çíà÷åíèå, íî íåò ãàðàíòèé, ÷òî îíî ðàâíî -1 */

#ifndef INFTIM

#define INFTIM          (- 1 )    /* íåîãðàíè÷åííîå âðåìÿ îïðîñà */

#ifdef	HAVE_POLL_H

#define	INFTIM_UNPH				/* ÷òîáû èç ôàéëà unpxti.h óçíàòü, ÷òî êîíñòàíòà îïðåäåëåíà */

#endif

#endif



/* Ïðî÷èå êîíñòàíòû */

#ifndef	PATH_MAX			/* äîëæíà áûòü â <limits.h> */

#define	PATH_MAX	 1024 	/* ìàêñèìàëüíîå êîëè÷åñòâî ñèìâîëîâ â ïîëíîì èìåíè ôàéëà */

#endif



#define	MAX_PATH	 1024 

#define	MAXLINE		 4096 	/* ìàêñèìàëüíàÿ äëèíà ñòðîêè */

#define	BUFFSIZE	 8192 	/* îáúåì áóôåðà ÷òåíèÿ è çàïèñè */



#define	FILE_MODE	(S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)

					/* ðàçðåøåíèÿ ïî óìîë÷àíèþ äëÿ íîâûõ ôàéëîâ */

#define	DIR_MODE	(FILE_MODE | S_IXUSR | S_IXGRP | S_IXOTH)

					/* ðàçðåøåíèÿ ïî óìîë÷àíèþ äëÿ íîâûõ êàòàëîãîâ */

#define	SVMSG_MODE	(MSG_R | MSG_W | MSG_R>> 3  | MSG_R>> 6 )

					/* ðàçðåøåíèÿ ïî óìîë÷àíèþ äëÿ íîâûõ î÷åðåäåé ñîîáùåíèé System V */

#define	SVSEM_MODE	(SEM_R | SEM_A | SEM_R>> 3  | SEM_R>> 6 )

					/* ðàçðåøåíèÿ ïî óìîë÷àíèþ äëÿ íîâûõ ñåìàôîðîâ System V */

#define	SVSHM_MODE	(SHM_R | SHM_W | SHM_R>> 3  | SHM_R>> 6 )

					/* ðàçðåøåíèÿ ïî óìîë÷àíèþ äëÿ íîâîé ðàçäåëÿåìîé ïàìÿòè System V */



typedef	void	Sigfunc(int);	/* äëÿ îáðàáîò÷èêîâ ñèãíàëîâ */



#ifdef	HAVE_SIGINFO_T_STRUCT

typedef	void	Sigfunc_rt(int, siginfo_t *, void *);

#endif



#define	min(a,b)	((a) < (b) ? (a) : (b))

#define	max(a,b)	((a) > (b) ? (a) : (b))



#ifndef	HAVE_TIMESPEC_STRUCT

struct timespec {

  time_t	tv_sec;		/* ñåêóíäû */

  long		tv_nsec;	/* è íàíîñåêóíäû */

};

#endif



/*

 ôóíêöèÿõ-îáåðòêàõ open(), mq_open(), sem_open() ìû îáðàáàòûâàåì äîïîëíèòåëüíûå àðãóìåíòû ñ ïîìîùüþ ìàêðîñîâ va_XXX(). Îäèí èç àðãóìåíòîâ èìååò òèï mode_t, ÷òî ïðèâîäèò ê îøèáêå â BSD/OS, ãäå äëÿ ýòîãî òèïà èñïîëüçóþòñÿ 16-ðàçðÿäíûå öåëûå. Ïðè âûçîâå îáåðòêè êîìïèëÿòîð ïðåîáðàçîâûâàåò 16-ðàçðÿäíîå öåëîå â 32-ðàçðÿäíîå. Ïîýòîìó è íåîáõîäèìî òî, ÷òî ñäåëàíî íèæå.

 */



#ifdef	__bsdi__

#define	va_mode_t	int

#else

#define	va_mode_t	mode_t

#endif



		/* ìàêðîñû áëîêèðîâêè çàïèñåé */

#define	read_lock(fd, offset, whence, len) \

			lock_reg(fd, F_SETLK, F_RDLCK, offset, whence, len)

#define	readw_lock(fd, offset, whence, len) \

			lock_reg(fd, F_SETLKW, F_RDLCK, offset, whence, len)

#define	write_lock(fd, offset, whence, len) \

			lock_reg(fd, F_SETLK, F_WRLCK, offset, whence, len)

#define	writew_lock(fd, offset, whence, len) \

			lock_reg(fd, F_SETLKW, F_WRLCK, offset, whence, len)

#define	un_lock(fd, offset, whence, len) \

			lock_reg(fd, F_SETLK, F_UNLCK, offset, whence, len)

#define	is_read_lockable(fd, offset, whence, len) \

			lock_test(fd, F_RDLCK, offset, whence, len)

#define	is_write_lockable(fd, offset, whence, len) \

			lock_test(fd, F_WRLCK, offset, whence, len)


В комментариях самого хидера написано, что этот хидер надо поместить в системную директорию lib. Я так и сделал, используя команду
Код: plaintext
gksudo nautilus
. Но вот откомпилировать всё равно не получается! Пишет, что No such file or directory. Как правильно использовать этот хидер?
...
Рейтинг: 0 / 0
пример из книги Стивенса Unix Network Programming
    #36900626
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не нужно помещать хэдеры в системный каталог lib
Если уж помещать - то в /usr/include
Да и туда не нужно
Нужно почитать по опциям компилятора, в частности директива
"-I/path/to/your/private/headers"
...
Рейтинг: 0 / 0
пример из книги Стивенса Unix Network Programming
    #36906914
keinW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
landyНе нужно помещать хэдеры в системный каталог lib
Если уж помещать - то в /usr/include
Да и туда не нужно
Нужно почитать по опциям компилятора, в частности директива
"-I/path/to/your/private/headers"

+1


@24spam@tut.by
Header правильнее было бы "произносить" в русском варианте как "хэдер". А то я до того момента пока не увидел расширение не мог понять о чем вы говорите. Не обижайтесь только. ;)
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / пример из книги Стивенса Unix Network Programming
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]