Ò׽ؽØÍ¼Èí¼þ¡¢µ¥Îļþ¡¢Ãâ°²×°¡¢´¿ÂÌÉ«¡¢½ö160KB

LinuxÉ豸Çý¶¯±à³ÌÖ®×èÈûÓë·Ç×èÈû

×èÈû²Ù×÷ÊÇÖ¸£¬ÔÚÖ´ÐÐÉ豸²Ù×÷ʱ£¬Èô²»ÄÜ»ñµÃ×ÊÔ´£¬Ôò½ø³Ì¹ÒÆðÖ±µ½Âú×ã¿É²Ù×÷µÄÌõ¼þÔÙ½øÐвÙ×÷¡£·Ç×èÈû²Ù×÷µÄ½ø³ÌÔÚ²»ÄܽøÐÐÉ豸²Ù×÷ʱ£¬²¢²»¹ÒÆð¡£±»¹ÒÆðµÄ½ø³Ì½øÈësleep״̬£¬±»´Óµ÷¶ÈÆ÷µÄÔËÐжÓÁÐÒÆ×ߣ¬Ö±µ½µÈ´ýµÄÌõ¼þ±»Âú×ã¡£
¡¡¡¡ÔÚLinux
¡¡¡¡¹ØÓÚÉÏÊöÀý³Ì£¬ÎÒÃDz¹³ä˵һµã£¬Èç¹û½«Çý¶¯³ÌÐòÖеÄreadº¯Êý¸ÄΪ£º
static ssize_t globalvar_read(struct file *filp, char *buf, size_t len, loff_t *off)
{
¡¡//»ñÈ¡ÐźÅÁ¿£º¿ÉÄÜ×èÈû
¡¡if (down_interruptible(&sem))
¡¡{
¡¡¡¡return - ERESTARTSYS;
¡¡}
¡¡//µÈ´ýÊý¾Ý¿É»ñµÃ£º¿ÉÄÜ×èÈû
¡¡if (wait_event_interruptible(outq, flag != 0))
¡¡{
¡¡¡¡return - ERESTARTSYS;
¡¡}
¡¡flag = 0;
¡¡//ÁÙ½ç×ÊÔ´·ÃÎÊ
¡¡if (copy_to_user(buf, &global_var, sizeof(int)))
¡¡{
¡¡¡¡up(&sem);
¡¡¡¡return - EFAULT;
¡¡}
¡¡//ÊÍ·ÅÐźÅÁ¿
¡¡up(&sem);
¡¡return sizeof(int);
}
¡¡¡¡¼´½»»»wait_event_interruptible(outq, flag != 0)ºÍdown_interruptible(&sem)µÄ˳Ðò£¬Õâ¸öÇý¶¯³ÌÐò½«±äµÃ²»¿ÉÔËÐС£Êµ¼ÊÉÏ£¬µ±Á½¸ö¿ÉÄÜÒª×èÈûµÄʼþͬʱ³öÏÖʱ£¬¼´Á½¸öwait_event»òdown°ÚÔÚÒ»ÆðµÄʱºò£¬½«±äµÃ·Ç³£Î£ÏÕ£¬ËÀËøµÄ¿ÉÄÜÐԺܴó£¬Õâ¸öʱºòÎÒÃÇÒªÌØ±ðÁôÒâËüÃǵijöÏÖ˳Ðò¡£µ±È»£¬ÎÒÃÇÓ¦¸Ã¾¡¿ÉÄܵرÜÃâÕâÖÖÇé¿öµÄ·¢Éú£¡
¡¡¡¡+»¹ÓÐÒ»¸öÓëÉ豸×èÈûÓë·Ç×èÈû·ÃÎÊϢϢÏà¹ØµÄÂÛÌ⣬¼´selectºÍpoll£¬selectºÍpollµÄ±¾ÖÊÒ»Ñù£¬Ç°ÕßÔÚBSD UnixÖÐÒýÈ룬ºóÕßÔÚSystem VÖÐÒýÈë¡£pollºÍselectÓÃÓÚ²éѯÉ豸µÄ״̬£¬ÒÔ±ãÓû§³ÌÐò»ñÖªÊÇ·ñÄܶÔÉ豸½øÐзÇ×èÈûµÄ·ÃÎÊ£¬ËüÃǶ¼ÐèÒªÉ豸Çý¶¯³ÌÐòÖеÄpollº¯ÊýÖ§³Ö¡£
¡¡¡¡Çý¶¯³ÌÐòÖÐpollº¯ÊýÖÐ×îÖ÷ÒªÓõ½µÄÒ»¸öAPIÊÇpoll_wait£¬ÆäÔ­ÐÍÈçÏ£º
void poll_wait(struct file *filp, wait_queue_heat_t *queue, poll_table * wait);
¡¡¡¡poll_waitº¯ÊýËù×öµÄ¹¤×÷Êǰѵ±Ç°½ø³ÌÌí¼Óµ½wait²ÎÊýÖ¸¶¨µÄµÈ´ýÁÐ±í£¨poll_table£©ÖС£ÏÂÃæÎÒÃǸøglobalvarµÄÇý¶¯Ìí¼ÓÒ»¸öpollº¯Êý£º
static unsigned int globalvar_poll(struct file *filp, poll_table *wait)
{
¡¡unsigned int mask = 0;
¡¡poll_wait(filp, &outq, wait);
¡¡//Êý¾ÝÊÇ·ñ¿É»ñµÃ£¿
¡¡if (flag != 0)
¡¡{
¡¡¡¡mask |= POLLIN | POLLRDNORM; //±êʾÊý¾Ý¿É»ñµÃ
¡¡}
¡¡return mask;
}
¡¡¡¡ÐèҪ˵Ã÷µÄÊÇ£¬poll_waitº¯Êý²¢²»×èÈû£¬³ÌÐòÖÐpoll_wait(filp, &outq, wait)Õâ¾ä»°µÄÒâ˼²


Ïà¹ØÎĵµ£º

linuxÏÂudp·þÎñÆ÷¶ËÔ´ÂëʾÀý

#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <s ......

linuxÏ´óÎļþ¶ÁдԴÂëʾÀý

#define _LARGEFILE_SOURCE
#define _LARGEFILE64_SOURCE
#define _FILE_OFFSET_BITS 64
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
int main()
{
printf("sizeof(off_t) = %d\n", sizeof(off_t));
int ......

Linuxϵͳ¹²Ïí¿â±à³Ì

Ò»¡¢ËµÃ÷
¡¡¡¡ÀàËÆWindowsϵͳÖеĶ¯Ì¬Á´½Ó¿â£¬LinuxÖÐÒ²ÓÐÏàÓ¦µÄ¹²Ïí¿âÓÃÒÔÖ§³Ö´úÂëµÄ¸´Óá£WindowsÖÐΪ*.dll£¬¶øLinuxÖÐΪ*.so¡£ÏÂÃæÏêϸ½éÉÜÈçºÎ´´½¨¡¢Ê¹ÓÃLinuxµÄ¹²Ïí¿â¡£
¶þ¡¢´´½¨¹²Ïí¿â
ÔÚmytestso.cÎļþÖУ¬´úÂëÈçÏ£º
#include <stdio.h>
#include <stdlib.h>
int GetMax(int a, int b)
{
i ......

linux ¹²Ïí¿â»ù±¾Ê¹ÓÃ

1 ´´½¨ºÍʹÓþ²Ì¬¿â
´´½¨Ò»¸ö¾²Ì¬¿âÊÇÏ൱¼òµ¥µÄ¡£Í¨³£Ê¹Óà ar ³ÌÐò°ÑһЩĿ±êÎļþ£¨.o£©×éºÏÔÚÒ»Æð£¬
³ÉΪһ¸öµ¥¶ÀµÄ¿â£¬È»ºóÔËÐÐ ranlib£¬ÒÔ¸ø¿â¼ÓÈëһЩË÷ÒýÐÅÏ¢¡£
2 ´´½¨ºÍʹÓù²Ïí¿â
ÌØÊâµÄ±àÒëºÍÁ¬½ÓÑ¡Ïî
-D_REENTRANT         Ê¹µÃÔ¤´¦ÀíÆ÷·ûºÅ _REENTRANT ±»¶¨Ò壬Õâ¸ö·ûºÅ¼¤»î ......

LinuxÖÐ ¾²Ì¬¿âºÍ¹²Ïí¿â

1£® ´´½¨Ä¿Â¼
 mkdir –p test/sub
2£® ÔÚ×ÓĿ¼sub/ϱàдhello.cºÍhello.h
 /*****hello.c*****/
 #include <stdio.h>
 #include “hello.h”
 void hello()
 {
 printf(“Hello!\n”);
 }
 
 /*****hello.h**** ......
© 2009 ej38.com All Rights Reserved. ¹ØÓÚE½¡ÍøÁªÏµÎÒÃÇ | Õ¾µãµØÍ¼ | ¸ÓICP±¸09004571ºÅ