Linux C——I/O和进程函数汇总

标准IO函数

打开文件

1.fopen()

#include <stdio.h>
定义:
FILE *fopen(const char *filename, const char *mode);
功能:
    打开一个文件,并返回一个指向该文件的指针(文件流)。
参数:
    filename:要打开的文件名。
    mode:打开模式,可以是“r”、“w”、“a”、“r+”、“w+”、“a+”。
返回值:
    成功:返回一个指向文件流的指针。
    失败:返回NULL。

关闭文件

2.fclose()

#include <stdio.h>
定义:
int fclose(FILE *stream);
功能:
    关闭一个文件流。
参数:
    stream:文件流指针。
返回值:
    成功:返回0。
    失败:返回EOF。

读文件

按字符读文件
3.fgetc()

#include <stdio.h>
定义:
int fgetc(FILE *stream);
功能:
    从文件流中读取一个字符,并返回该字符的ASCII码。
参数:
    stream:文件流指针。
返回值:
    成功:返回读取到的字符的ASCII码。
    失败:返回EOF。

按字符串读文件
4.fgets()

#include <stdio.h>
定义:
char *fgets(char *s, int n, FILE *stream);
功能:
    从文件流中读取字符串,并存入字符串s中。
参数:
    s:存放读入的字符串的缓冲区。
    n:需要读取字符串的长度。
    stream:文件流指针。
返回值:
    成功:返回s。
    失败:返回NULL。

按二进制读文件
5.fread()

#include <stdio.h>
定义:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:
    从文件流中读取二进制数据,并存入ptr指向的内存中。
参数:
    ptr:存放读入数据的内存地址。
    size:每个数据项的大小。
    nmemb:要读取的数据项的个数。
    stream:文件流指针。
返回值:
    成功:返回实际读取的字节数。
    失败:返回0。

写文件

按字符写文件
6.fputc()

#include <stdio.h>
定义:
int fputc(int c, FILE *stream);
功能:
    将一个字符c写入文件流。
参数:
    c:要写入的字符。
    stream:文件流指针。
返回值:
    成功:返回写入的字符的ASCII码。
    失败:返回EOF。

按行写文件
7.fputs()

#include <stdio.h>
定义:
int fputs(const char *s, FILE *stream);
功能:
    将字符串s写入文件流。
参数:
    s:要写入的字符串。
    stream:文件流指针。
返回值:
    成功:返回0。
    失败:返回EOF。

按二进制写文件
8.fwrite()

#include <stdio.h>
定义:
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:
    将二进制数据写入文件流。
参数:
    ptr:存放要写入数据的内存地址。
    size:每个数据项的大小。
    nmemb:要写入的数据项的个数。
    stream:文件流指针。
返回值:
    成功:返回实际写入的字节数。
    失败:返回0。

文件定位

9.fseek()

#include <stdio.h>
定义:
int fseek(FILE *stream, long int offset, int whence);
功能:
    定位文件流的读写位置。
参数:
    stream:文件流指针。
    offset:相对于whence的偏移量。
    whence:偏移量的参考位置,可以是SEEK_SET、SEEK_CUR、SEEK_END。
返回值:
    成功:返回0。
    失败:返回非0。

10.ftell()

#include <stdio.h>
定义:
long int ftell(FILE *stream);
功能:
    获取文件流的当前位置。
参数:
    stream:文件流指针。
返回值:
    当前位置的偏移量。

11.rewind()

#include <stdio.h>
定义:
void rewind(FILE *stream);
功能:
    重置文件流的读写位置到文件头。
参数:
    stream:文件流指针。

文件状态

12.ferror()

#include <stdio.h>
定义:
int ferror(FILE *stream);
功能:
    检查文件流是否发生错误。
参数:
    stream:文件流指针。
返回值:
    发生错误:返回非0。
    未发生错误:返回0。

13.feof()

#include <stdio.h>
定义:
int feof(FILE *stream);
功能:
    检查文件流是否到达文件尾。
参数:
    stream:文件流指针。
返回值:
    到达文件尾:返回非0。
    未到达文件尾:返回0。

重定向打开文件

14.freopen()

#include <stdio.h>
定义:
FILE *freopen(const char *filename, const char *mode, FILE *stream);
功能:
    打开一个文件,并用stream代替原来的文件流。
参数:
    filename:要打开的文件名。
    mode:打开模式。
    stream:文件流指针。
返回值:
    成功:返回stream。
    失败:返回NULL。

文件IO函数

打开文件

15.open()

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
定义:
int open(const char *pathname, int flags, mode_t mode);
功能:
    打开一个文件,并返回一个文件描述符。
参数:
    pathname:要打开的文件名。
    flags:打开模式,可以是O_RDONLY、O_WRONLY、O_RDWR、O_APPEND、O_CREAT、O_TRUNC。
    mode:文件权限。
返回值:
    成功:返回文件描述符。
    失败:返回-1。

关闭文件

16.close()

#include <unistd.h>
定义:
int close(int fd);
功能:
    关闭一个文件描述符。
参数:
    fd:文件描述符。
返回值:
    成功:返回0。
    失败:返回-1。

读文件

17.read()

#include <unistd.h>
定义:
ssize_t read(int fd, void *buf, size_t count);
功能:
    从文件描述符fd中读取count个字节,并存入buf中。
参数:
    fd:文件描述符。
    buf:存放读入数据的缓冲区。
    count:要读取的字节数。
返回值:
    成功:返回实际读取的字节数。
    失败:返回-1。

写文件

18.write()

#include <unistd.h>
定义:
ssize_t write(int fd, const void *buf, size_t count);
功能:
    将buf中count个字节写入文件描述符fd中。
参数:
    fd:文件描述符。
    buf:存放要写入数据的缓冲区。
    count:要写入的字节数。
返回值:
    成功:返回实际写入的字节数。
    失败:返回-1。

文件定位

19.lseek()

#include <unistd.h>
定义:
off_t lseek(int fd, off_t offset, int whence);
功能:
    定位文件描述符fd的读写位置。
参数:
    fd:文件描述符。
    offset:相对于whence的偏移量。
    whence:偏移量的参考位置,可以是SEEK_SET、SEEK_CUR、SEEK_END。
返回值:
    成功:返回新的文件位置。
    失败:返回-1。

文件属性获取

20.stat()

#include <sys/stat.h>
定义:
int stat(const char *pathname, struct stat *buf);
功能:
    获取文件pathname的状态信息。
参数:
    pathname:要获取信息的文件名。
    buf:存放信息的结构体。
返回值:
    成功:返回0。
    失败:返回-1。
struct stat 
{
    dev_t    st_dev;      /* 设备ID */
    ino_t     st_ino;     /* inode号 */
    mode_t    st_mode;    /* 文件类型和权限 */
    nlink_t   st_nlink;   /* 硬链接数 */
    uid_t     st_uid;     /* 用户ID */
    gid_t     st_gid;     /* 组ID */
    off_t     st_size;    /* 大小 */
    time_t    st_atime;   /* 最后访问时间 */
    time_t    st_mtime;   /* 最后修改时间 */
    time_t    st_ctime;   /* 最后状态改变时间 */
};

目录操作

21.opendir()

#include <dirent.h>
定义:
DIR *opendir(const char *name);
功能:
    打开一个目录,并返回一个DIR指针。
参数:
    name:要打开的目录名。
返回值:
    成功:返回一个DIR指针。
    失败:返回NULL。

22.readdir()

#include <dirent.h>
定义:
struct dirent *readdir(DIR *dirp);
功能:
    读取目录dirp中的下一个目录项,并返回一个dirent指针。
参数:
    dirp:目录指针。
返回值:
    成功:返回一个dirent指针。
    失败:返回NULL。
struct dirent 
{
    ino_t   d_ino;               /* 索引节点号*/
    off_t   d_off;               /*在目录文件中的偏移量*/
    unsigned short d_reclen;     /* 文件名长度*/
    unsigned char  d_type;       /* 文件类型 */
    char    d_name[256];         /* 文件名 */
};

23.closedir()

#include <dirent.h>
定义:
int closedir(DIR *dirp);
功能:
    关闭目录dirp。
参数:
    dirp:目录指针。
返回值:
    成功:返回0。
    失败:返回-1。

进程函数

创建进程

24.fork()

#include <unistd.h>
定义:
pid_t fork(void);
功能:
    创建一个子进程,并返回子进程的PID。
参数:
    无。
返回值:
    成功:在父进程中返回子进程的PID,在子进程中返回0。
    失败:返回-1。

退出进程

25.exit()

#include <stdlib.h>
定义:
void exit(int status);
功能:
    退出当前进程并刷新缓冲区,返回status给父进程。
参数:
    status:退出状态。

26._exit()

#include <stdlib.h>
定义:
void _exit(int status);
功能:
    立即退出当前进程,并返回status给父进程。
参数:
    status:退出状态。

等待子进程

27.wait()

#include <sys/types.h>
#include <sys/wait.h>
定义:
pid_t wait(int *status);
功能:
    等待子进程结束,并返回子进程的PID和退出状态。
参数:
    status:存放退出状态的指针。
返回值:
    成功:返回子进程的PID。
    失败:返回-1。

28.waitpid()

#include <sys/types.h>
#include <sys/wait.h>
定义:
pid_t waitpid(pid_t pid, int *status, int options);
功能:
    等待子进程结束,并返回子进程的PID和退出状态。
参数:
    pid:等待的子进程ID。
    status:存放退出状态的指针。
    options:选项
        0:阻塞
        WNOHANG:非阻塞(没有子进程退出会立刻返回)
返回值:
    成功:返回子进程的PID。
    失败:返回-1。

获取进程ID

29.getpid()

#include <unistd.h>
定义:
pid_t getpid(void);
功能:
    获取当前进程的PID。
参数:
    无。
返回值:
    当前进程的PID。

30.getppid()

#include <unistd.h>
定义:
pid_t getppid(void);
功能:
    获取父进程的PID。
参数:
    无。
返回值:
    父进程的PID。

线程函数

创建线程

31.pthread_create()

#include <pthread.h>
定义:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
功能:
    创建一个线程,并返回线程ID。
参数:
    thread:存放线程ID的指针。
    attr:线程属性,一般为NULL。
    start_routine:线程函数。
    arg:线程函数的参数,可以为NULL。
返回值:
    成功:返回0。
    失败:返回非0。

退出线程

32.pthread_exit()

#include <pthread.h>
定义:
void pthread_exit(void *retval);
功能:
    退出当前线程,并返回retval给父线程。
参数:
    retval:线程退出值,可以为NULL。

等待线程

33.pthread_join()

#include <pthread.h>
定义:
int pthread_join(pthread_t thread, void **retval);
功能:
    阻塞等待线程thread结束,并返回线程的退出值。
参数:
    thread:线程ID。
    retval:存放退出值的指针,可以为NULL。
返回值:
    成功:返回0。
    失败:返回非0。

获取线程ID

34.pthread_self()

#include <pthread.h>
定义:
pthread_t pthread_self(void);
功能:
    获取当前线程的ID。
参数:
    无。
返回值:
    当前线程的ID。

线程分离

35.pthread_detach()

#include <pthread.h>
定义:
int pthread_detach(pthread_t thread);
功能:
参数:
    thread:线程ID。
返回值:
    成功:返回0。
    失败:返回非0。

线程取消

36.pthread_cancel()

#include <pthread.h>
定义:
int pthread_cancel(pthread_t thread);
功能:
    取消线程thread。
参数:
    thread:线程ID。
返回值:
    成功:返回0。
    失败:返回非0。

37.pthread_testcancel()

#include <pthread.h>
定义:
void pthread_testcancel(void);
功能:
    检查是否有线程取消。
参数:
    无。

线程间通信

线程同步

初始化信号量

38.sem_init()

#include <semaphore.h>
定义:
int sem_init(sem_t *sem, int pshared, unsigned int value);
功能:
    初始化一个信号量。
参数:
    sem:信号量指针。
    pshared:共享标志,0为线程间使用,1为进程间使用。
    value:初始值。
返回值:
    成功:返回0。
    失败:返回非0。

申请资源(P操作)

39.sem_wait()

#include <semaphore.h>
定义:
int sem_wait(sem_t *sem);
功能:
    申请一个信号量。
参数:
    sem:信号量指针。
返回值:
    成功:返回0。
    失败:返回非0。

释放资源(V操作)

40.sem_post()

#include <semaphore.h>
定义:
int sem_post(sem_t *sem);
功能:
    释放一个信号量。
参数:
    sem:信号量指针。
返回值:
    成功:返回0。
    失败:返回非0。

线程互斥

初始化互斥锁

41.pthread_mutex_init()

#include <pthread.h>
定义:
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);
功能:
    初始化一个互斥锁。
参数:
    mutex:互斥锁指针。
    attr:互斥锁属性,一般为NULL。
返回值:
    成功:返回0。
    失败:返回非0。

加锁

42.pthread_mutex_lock()

#include <pthread.h>
定义:
int pthread_mutex_lock(pthread_mutex_t *mutex);
功能:
    加锁一个互斥锁。
参数:
    mutex:互斥锁指针。
返回值:
    成功:返回0。
    失败:返回非0。

解锁

43.pthread_mutex_unlock()

#include <pthread.h>
定义:
int pthread_mutex_unlock(pthread_mutex_t *mutex);
功能:
    解锁一个互斥锁。
参数:
    mutex:互斥锁指针。
返回值:
    成功:返回0。
    失败:返回非0。

销毁互斥锁

44.pthread_mutex_destroy()

#include <pthread.h>
定义:
int pthread_mutex_destroy(pthread_mutex_t *mutex);
功能:
    销毁一个互斥锁。
参数:
    mutex:互斥锁指针。
返回值:
    成功:返回0。
    失败:返回非0。

条件变量

初始化条件变量

45.pthread_cond_init()

#include <pthread.h>
定义:
int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr);
功能:
    初始化一个条件变量。
参数:
    cond:条件变量指针。
    attr:条件变量属性,一般为NULL。
返回值:
    成功:返回0。
    失败:返回非0。

等待条件

46.pthread_cond_wait()

#include <pthread.h>
定义:
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
功能:
    等待条件变量cond。
参数:
    cond:条件变量指针。
    mutex:互斥锁指针。
返回值:
    成功:返回0。
    失败:返回非0。

通知一个等待线程

47.pthread_cond_signal()

#include <pthread.h>
定义:
int pthread_cond_signal(pthread_cond_t *cond);
功能:
    通知一个等待条件变量的线程。
参数:
    cond:条件变量指针。
返回值:
    成功:返回0。
    失败:返回非0。

通知所有等待线程

48.pthread_cond_broadcast()

#include <pthread.h>
定义:
int pthread_cond_broadcast(pthread_cond_t *cond);
功能:
    通知所有等待条件变量的线程。
参数:
    cond:条件变量指针。
返回值:
    成功:返回0。
    失败:返回非0。

进程间通信

无名管道

创建管道

49.pipe()

#include <unistd.h>
定义:
int pipe(int filedes[2]);
功能:
    创建一个无名管道,并返回文件描述符。
参数:
    filedes:存放文件描述符的数组。
返回值:
    成功:返回0。
    失败:返回-1。

有名管道

创建管道

50.mkfifo()

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
定义:
int mkfifo(const char *pathname, mode_t mode);
功能:
    创建一个有名管道。
参数:
    pathname:管道名。
    mode:权限。
返回值:
    成功:返回0。
    失败:返回-1。

信号

发送信号

51.kill()

#include <signal.h>
定义:
int kill(pid_t pid, int sig);
功能:
    发送信号sig给进程pid。
参数:
    pid:进程ID。
    sig:信号值。
返回值:
    成功:返回0。
    失败:返回-1。

52.raise()

#include <signal.h>
定义:
int raise(int sig);
功能:
    发送信号sig给当前进程。
参数:
    sig:信号值。
返回值:
    成功:返回0。
    失败:返回-1。

定时器

53.alarm()

#include <unistd.h>
定义:
unsigned int alarm(unsigned int seconds);
功能:
    设置一个定时器,在seconds秒后向进程发送SIGALRM信号。
参数:
    seconds:定时时间,单位为秒。
返回值:
    成功:返回0。
    失败:返回非0。

挂起进程

54.pause()

#include <unistd.h>
定义:
int pause(void);
功能:
    挂起进程,直到收到信号。
参数:
    无。
返回值:
    无。

信号处理

55.signal()

定义:
void (*signal(int signum, void (*func)(int)))(int);
或:
sighandler_t signal(int signum, sighandler_t handler);
功能:信号处理函数
参数:
    signum:要处理的信号
    handler:信号处理方式
            SIG_IGN:忽略信号
            SIG_DFL:执行默认操作
            handler:捕捉信号  
返回值:
    成功:设置之前的信号处理方式
    失败:-1

共享内存

创建key值

56.ftok()

#include <sys/ipc.h>
#include <sys/shm.h>
定义:
key_t ftok(const char *pathname, int proj_id);
功能:
    创建一个key值。
参数:
    pathname:文件名。
    proj_id:项目ID。
返回值:
    成功:返回key值。
    失败:返回-1。

创建共享内存

57.shmget()

#include <sys/ipc.h>
#include <sys/shm.h>
定义:
int shmget(key_t key, size_t size, int flag);
功能:
    创建一个共享内存。
参数:
    key:key值。
    size:共享内存大小。
    flag:标志
        IPC_CREAT:创建新的共享内存
        IPC_EXCL:如果key值已存在,则返回错误
        一般使用IPC_CREAT|IPC_EXCL|0777表示创建共享内存的时候的权限
返回值:
    成功:返回共享内存ID。
    失败:返回-1。

映射共享内存

58.shmat()

#include <sys/ipc.h>
#include <sys/shm.h>
定义:
void *shmat(int shmid, const void *shmaddr, int shmflg);
功能:
    映射共享内存。
参数:
    shmid:共享内存ID。
    shmaddr:共享内存地址,一般为NULL。
    shmflg:访问标志
        0:以默认方式访问
        0x100:以只读方式访问
返回值:
    成功:返回共享内存地址。
    失败:返回(void*)-1。

解除映射

59.shmdt()

#include <sys/ipc.h>
#include <sys/shm.h>
定义:
int shmdt(const void *shmaddr);
功能:
    解除共享内存的映射。
参数:
    shmaddr:共享内存地址。
返回值:
    成功:返回0。
    失败:返回-1。

删除共享内存

60.shmctl()

#include <sys/ipc.h>
#include <sys/shm.h>
定义:
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
功能:
    控制共享内存。
参数:
    shmid:共享内存ID。
    cmd:命令
        IPC_RMID:删除共享内存
        IPC_SET:设置共享内存属性
        IPC_STAT:获取共享内存属性
    buf:共享内存属性结构体。
返回值:
    成功:返回0。
    失败:返回-1。

信号灯集

创建或打开信号灯集

61.semget()

#include <sys/ipc.h>
#include <sys/sem.h>
定义:
int semget(key_t key, int nsems, int semflg);
功能:
    创建或打开一个信号灯集。
参数:
    key:key值。
    nsems:信号灯个数。
    semflg:标志
        IPC_CREAT:创建新的信号灯集
        IPC_EXCL:如果key值已存在,则返回错误
        一般使用IPC_CREAT|IPC_EXCL|0777表示创建信号灯集的时候的权限
返回值:
    成功:返回信号灯集ID。
    失败:返回-1。

初始化信号灯集

62.semctl()

#include <sys/ipc.h>
#include <sys/sem.h>
定义:
int semctl(int semid, int semnum, int cmd, ... /* union semun arg */ );
功能:
    初始化或设置信号灯集。
参数:
    semid:信号灯集ID。
    semnum:信号灯编号。
    cmd:命令
        SETVAL:设置信号灯的值
        GETVAL:获取信号灯的值
        GETALL:获取信号灯集的所有信号灯的值
        IPC_RMID:删除信号灯集
        IPC_SET:设置信号灯集属性
        IPC_STAT:获取信号灯集属性
    arg:当cmd为SETVAL时,需要传递共用体
返回值:
    成功:返回0。
    失败:返回-1。
union semun 
{
    int val;                  /* 信号量的初值 */
    struct semid_ds *buf;     /* Buffer for IPC_STAT, IPC_SET */
    unsigned short *array;    /* Array for GETALL, SETALL */
    struct seminfo *__buf;    /* Buffer for IPC_INFO (Linux-specific) */
};

PV操作

63.semop()

#include <sys/ipc.h>
#include <sys/sem.h>
定义:
int semop(int semid, struct sembuf *sops, size_t nsops);
功能:
    对信号灯集合中的信号量进行PV操作。
参数:
    semid:信号灯集ID。
    sops:信号灯操作结构体。
    nsops:信号灯操作个数。
返回值:
    成功:返回0。
    失败:返回-1。
struct sembuf 
{
   short  sem_num;  // 要操作的信号灯的编号
   short  sem_op;   //   0 :  等待,直到信号灯的值变成0
                    //   1  :  释放资源,V操作
                    //  -1 :  分配资源,P操作                    
    short  sem_flg; // 0(阻塞),IPC_NOWAIT, SEM_UNDO
};

消息队列

创建消息队列

64.msgget()

#include <sys/ipc.h>
#include <sys/msg.h>
定义:
int msgget(key_t key, int msgflg);
功能:
    创建一个消息队列。
参数:
    key:key值。
    msgflg:标志
        IPC_CREAT:创建新的消息队列
        IPC_EXCL:如果key值已存在,则返回错误
        一般使用IPC_CREAT|IPC_EXCL|0777表示创建消息队列的时候的权限
返回值:
    成功:返回消息队列ID。
    失败:返回-1。

发送消息

65.msgsnd()

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
定义:
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
功能:
    发送消息到消息队列。

参数:
    msqid:消息队列ID。
    msgp:消息指针。
    msgsz:消息大小。
    msgflg:标志
        IPC_NOWAIT:如果消息队列已满,则返回错误
        IPC_NOWAIT:如果消息队列已满,则阻塞等待直到消息队列空闲
        一般使用0表示立即发送消息
返回值:
    成功:返回0。
    失败:返回-1。

接收消息

66.msgrcv()

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
定义:
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);
功能:
    接收消息队列中的消息。
参数:
    msqid:消息队列ID。
    msgp:消息指针。
    msgsz:消息大小。
    msgtyp:消息类型。
    msgflg:标志
        IPC_NOWAIT:如果消息队列为空,则返回错误
        IPC_NOWAIT:如果消息队列为空,则阻塞等待直到消息队列有消息
        IPC_EXCEPT:接收除msgtyp外的所有消息
        一般使用0表示接收任意消息
返回值:
    成功:返回消息大小。
    失败:返回-1。

控制消息队列

67.msgctl()

#include <sys/ipc.h>
#include <sys/msg.h>
定义:
int msgctl(int msqid, int cmd, struct msqid_ds *buf);
功能:
    控制消息队列。
参数:
    msqid:消息队列ID。
    cmd:命令
        IPC_RMID:删除消息队列
        IPC_SET:设置消息队列属性
        IPC_STAT:获取消息队列属性
    buf:消息队列属性结构体。
返回值:
    成功:返回0。
    失败:返回-1。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇