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

linux 0.11 ÄÚºËѧϰ pipe.c


/*
 * ¸ÃÎļþÖеÄÁ½¸öº¯Êýread_pipeºÍwrite_pipeÊÇÉϲ㺯Êý
 * readºÍwriteµÄµ×²ãʵÏÖ
 */
/*
 *  linux/fs/pipe.c
 *
 *  (C) 1991  Linus Torvalds
 */
#include <signal.h>
#include <linux/sched.h>
// ÄÚ´æ¹ÜÀíÍ·Îļþ¡£º¬ÓÐÒ³Ãæ´óС¶¨ÒåºÍһЩҳÃæÊͷź¯ÊýÔ­ÐÍ
#include <linux/mm.h> /* for get_free_page */
#include <asm/segment.h>
/* pipeÀàËÆÓÚ¶ÓÁУ¬ÏòpipeµÄβ²¿Ð´ÈëÊý¾Ý£¬´ÓpipeµÄÍ·²¿¶ÁÈ¡Êý¾Ý    */
/* ¹ÜµÀ¶Á²Ù×÷º¯Êý    */
/* ²ÎÊýinode ÊǹܵÀ¶ÔÓ¦µÄi ½Úµã£¬buf ÊÇÊý¾Ý»º³åÇøÖ¸Õ룬count ÊǶÁÈ¡µÄ×Ö½ÚÊý */
/*
 * read_pipe()º¯ÊýÓÃÓÚ¶ÁÈ¡¹ÜµÀÖеÄÊý¾Ý£¬Èç¹û¹ÜµÀÖÐûÓÐÊý¾ÝµÄ»°£¬
 * »½ÐÑд¹ÜµÀ½ø³Ì£¬×Ô¼ºË¯Ãߣ¬Èç¹û¶Áµ½Êý¾Ý£¬²¢°ÑÊý¾Ý´«µ½Óû§»º³åÇø£¬
 * µ±°Ñ¹ÜµÀÖÐËùÓеÄÊý¾Ý¶¼È¡×ߺó£¬Ò²Òª»½Ðѵȴýд¹ÜµÀµÄ½ø³Ì£¬²¢·µ»Ø
 * ÒѶÁÊý¾Ý×Ö½ÚÊý
 */
int read_pipe(struct m_inode * inode, char * buf, int count)
{
int chars, size, read = 0;
while (count>0) 
{
// Èôµ±Ç°¹ÜµÀÖÐûÓÐÊý¾Ý(size=0)£¬Ôò»½Ðѵȴý¸Ã½ÚµãµÄ½ø³Ì
while (!(size=PIPE_SIZE(*inode)))
{
wake_up(&inode->i_wait);
// Èç¹ûÒÑûÓÐд¹ÜµÀÕß
if (inode->i_count != 2) /* are there any writers? */
return read; // ·µ»ØÒѶÁ×Ö½ÚÊý
// ·ñÔòÔÚ¸Ãi ½ÚµãÉÏ˯Ãߣ¬µÈ´ýÐÅÏ¢
sleep_on(&inode->i_wait);
}
// È¡¹ÜµÀβµ½»º³åÇøÄ©¶ËµÄ×Ö½ÚÊýchars
chars = PAGE_SIZE-PIPE_TAIL(*inode);
if (chars > count)
chars = count;
if (chars > size)
chars = size;
// ¶Á×Ö½Ú¼ÆÊý¼õÈ¥´Ë´Î¿É¶ÁµÄ×Ö½ÚÊýchars£¬²¢ÀÛ¼ÓÒѶÁ×Ö½ÚÊý
count -= chars;
read += chars;
// Áîsize Ö¸Ïò¹ÜµÀβ²¿£¬µ÷Õûµ±Ç°¹ÜµÀβָÕ루ǰÒÆchars ×Ö½Ú£©
size = PIPE_TAIL(*inode);
PIPE_TAIL(*inode) += chars;
PIPE_TAIL(*inode) &= (PAGE_SIZE-1);
// ½«¹ÜµÀÖеÄÊý¾Ý¸´ÖƵ½Óû§»º³åÇøÖÐ
while (chars-->0)
put_fs_byte(((char *)inode->i_size)[size++],buf++);
}
// »½Ðѵȴý¸Ã¹ÜµÀi ½ÚµãµÄ½ø³Ì
wake_up(&inode->i_wait);

// ·µ»Ø¶ÁÈ¡µÄ×Ö½ÚÊý
return read;


Ïà¹ØÎĵµ£º

ǶÈëʽLinux²Ù×÷ϵͳѧϰ¹æ

ǶÈëʽLinux²Ù×÷ϵͳѧϰ¹æ»®
ARM+LINUX·Ïߣ¬Ö÷¹¥Ç¶ÈëʽLinux²Ù×÷ϵͳ¼°ÆäÉÏÓ¦ÓÃÈí¼þ¿ª·¢Ä¿±ê£º 
£¨1£© ÕÆÎÕÖ÷Á÷ǶÈëʽ΢´¦ÀíÆ÷µÄ½á¹¹ÓëÔ­Àí£¨³õ²½¶¨Îªarm9£© 
£¨2£© ±ØÐëÕÆÎÕÒ»¸öǶÈëʽ²Ù×÷ϵͳ £¨³õ²½¶¨Îªuclinux»òlinux,°æ±¾´ý¶¨£© 
£¨3£© ±ØÐëÊìϤǶÈëʽÈí¼þ¿ª·¢Á÷³Ì²¢ÖÁÉÙ×öÒ ......

¡¶LINUXÉ豸Çý¶¯³ÌÐò¡·Ñ§Ï°Ôý¼Ç£¨¶þ£©

×ܽáÕ½ڣºµÚÈý½Ú ×Ö·ûÉ豸Çý¶¯
ÕâÒ»ÕÂÖ÷ÒªÊǽ²Ò»Ð©×Ö·ûÉ豸Çý¶¯³ÌÐòµÄÏà¹Ø֪ʶ¡£ÔÚ½øÐÐ×Ö·ûÉ豸Çý¶¯³ÌÐòѧϰ֮ǰ£¬ÎÒÃDZØÐëµÃŪÃ÷°×Ò»¸öÎÊÌ⣺Çý¶¯³ÌÐòʱ¸øË­Óõġ£
ºÜ¶àÇý¶¯³ÌÐòµÄ³õѧÕߣ¬°´ÕÕÒ»°ã±à³ÌÓïÑÔ£¨C£¬javaµÈµÈ£©±àдӦÓóÌÐòµÄ¾­Ñ飬º¯Êý¾ÍÊÇÓÃÀ´µ÷Óõġ£ÕâÖÖµ÷ÓùØϵ£¬ÔÚÓ¦ÓÿռäÀ´¿´£¬ÏÞÖƲ»ÊǺÜÃ÷ÏÔ¡£ºÜ¶à ......

linuxÌõ¼þ±äÁ¿Àý³Ì

#include
#include
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
void *thread1(void *);
void *thread2(void *);
int i=1;
main(void)
{
pthread_t t_a;
pthread_t t_b;
pthread_create(&t_a,NULL,thread1,(void *)NULL) ......

Linuxϳ£ÓÃCÓïÑÔ×Ö·û´®²Ù×÷º¯Êý

stroul£¬
strdup
snprintf()
atio
 
CÖг£ÓÃ×Ö·û´®²Ù×÷º¯Êý
#include <string.h>
 
size_t strlen(const char *s)   ²âÁ¿×Ö·û´®³¤¶ÈsµÄʵ¼Ê³¤¶È¡£
ÀýÈçs[20]="abc",ÄÇôstrlen(s)µÄ½á¹ûÊÇ3£¬¶ø²»ÊÇ20.Õâ¾ÍÊÇʵ¼Ê³¤¶È
 
char *strcat(const char *s1, const *s2)  ......
© 2009 ej38.com All Rights Reserved. ¹ØÓÚE½¡ÍøÁªÏµÎÒÃÇ | Õ¾µãµØͼ | ¸ÓICP±¸09004571ºÅ