Linux API/linux2016. 10. 7. 16:59

int fileno(FILE *stream);

FILE *fdopen(int fd, const char *mode);


[링크 : http://stackoverflow.com/.../how-can-i-convert-a-file-pointer-file-fp-to-a-file-descriptor-int-fd]

[링크 : http://stackoverflow.com/.../how-to-get-a-file-pointer-from-a-file-descriptor]

[링크 : https://linux.die.net/man/3/fileno]

[링크 : https://linux.die.net/man/3/fdopen]

'Linux API > linux' 카테고리의 다른 글

linux ipc  (0) 2016.12.20
pthread detach while  (0) 2016.12.20
shared memory - linux/IPC  (0) 2016.06.28
메시지 큐 - ipc  (0) 2016.06.28
pthread mutex shm_open  (0) 2016.06.27
Posted by 구차니

댓글을 달아 주세요

Linux API/linux2016. 6. 28. 15:56

System V와 POSIX 차이

[링크 : http://stackcanary.com/?p=59]


System V

[링크 : http://linux.die.net/man/2/shmget]

[링크 : http://linux.die.net/man/2/shmat] attach

[링크 : http://linux.die.net/man/2/shmdt] detach

[링크 : http://linux.die.net/man/2/shmctl]


POSIX


System V shared memory (shmget(2), shmop(2), etc.) is an older shared memory API. POSIX shared memory provides a simpler, and better designed interface; on the other hand POSIX shared memory is somewhat less widely available (especially on older systems) than System V shared memory.

[링크 : http://linux.die.net/man/7/shm_overview]

    [링크 : http://linux.die.net/man/3/shm_open]

    [링크 : http://linux.die.net/man/2/ftruncate]

    [링크 : http://linux.die.net/man/2/mmap]

'Linux API > linux' 카테고리의 다른 글

pthread detach while  (0) 2016.12.20
fd <-> fp 변환  (0) 2016.10.07
메시지 큐 - ipc  (0) 2016.06.28
pthread mutex shm_open  (0) 2016.06.27
리눅스 동적 라이브러리(*.so) 사용하기  (0) 2016.04.04
Posted by 구차니

댓글을 달아 주세요

Linux API/linux2016. 6. 28. 15:31


#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/msg.h>


struct msgbuf {

    long mtype;       /* message type, must be > 0 */

    char mtext[1];    /* message data */

};


int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);

ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);

int msgget(key_t key, int msgflg);

[링크 : http://linux.die.net/man/2/msgsnd]

[링크 : http://linux.die.net/man/2/msgget]



[링크 : http://www.joinc.co.kr/w/Site/system_programing/Book_LSP/ch08_IPC]

[링크 : http://www.joinc.co.kr/w/Site/system_programing/IPC/MessageQueue]

'Linux API > linux' 카테고리의 다른 글

fd <-> fp 변환  (0) 2016.10.07
shared memory - linux/IPC  (0) 2016.06.28
pthread mutex shm_open  (0) 2016.06.27
리눅스 동적 라이브러리(*.so) 사용하기  (0) 2016.04.04
리눅스 커널 모듈 관련 문서  (0) 2015.11.06
Posted by 구차니

댓글을 달아 주세요

Linux API/linux2016. 6. 27. 20:51

pthread_mutexattr_destroy, pthread_mutexattr_init - destroy and initialize the mutex attributes object

[링크 : http://linux.die.net/man/3/pthread_mutexattr_init]


mutex 속성을 설정하여 프로세스간 mutex로도 사용이 가능

ret = pthread_mutexattr_setpshared(&mtx_attr, PTHREAD_PROCESS_SHARED);

[링크 : https://kldp.org/node/107186]

[링크 : http://stackoverflow.com/questions/4252005/what-is-the-attribute-of-a-pthread-mutex]


[링크 : http://mintnlatte.tistory.com/357] mmap


결론은.. 공유 메모리를 통해 mutex 키를 공유하여

다른 프로세스들과도 mutex가 가능하다?

'Linux API > linux' 카테고리의 다른 글

shared memory - linux/IPC  (0) 2016.06.28
메시지 큐 - ipc  (0) 2016.06.28
리눅스 동적 라이브러리(*.so) 사용하기  (0) 2016.04.04
리눅스 커널 모듈 관련 문서  (0) 2015.11.06
readl(), writel()  (0) 2015.11.06
Posted by 구차니

댓글을 달아 주세요

Linux API/linux2016. 4. 4. 09:21

어떻게 보면 당연한..(?)

함수 포인터


#include <stdio.h>

#include <dlfcn.h>

#include "ctest.h"


int main(int argc, char **argv) 

{

   void *lib_handle;

   double (*fn)(int *);

   int x;

   char *error;


   lib_handle = dlopen("/opt/lib/libctest.so", RTLD_LAZY);

   if (!lib_handle) 

   {

      fprintf(stderr, "%s\n", dlerror());

      exit(1);

   }


   fn = dlsym(lib_handle, "ctest1");

   if ((error = dlerror()) != NULL)  

   {

      fprintf(stderr, "%s\n", error);

      exit(1);

   }


   (*fn)(&x);

   printf("Valx=%d\n",x);


   dlclose(lib_handle);

   return 0;

[링크 : http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html]


[링크 : http://linux.die.net/man/3/dlopen]

[링크 : http://linux.die.net/man/3/dlsym]

'Linux API > linux' 카테고리의 다른 글

메시지 큐 - ipc  (0) 2016.06.28
pthread mutex shm_open  (0) 2016.06.27
리눅스 커널 모듈 관련 문서  (0) 2015.11.06
readl(), writel()  (0) 2015.11.06
리눅스 모듈 프로그래밍 관련  (0) 2015.10.30
Posted by 구차니

댓글을 달아 주세요

Linux API/linux2015. 11. 6. 11:17

kmalloc() <-> kfree()


빌드 옵션

 -c: 커널 모듈은 독립적으로 실행 가능한 파일이 아니며, insmod를 사용하여 실행 시간 중에 커널에 링크되는 오브젝트 파일 이다. 결론적으로 모듈은 -c옵션을 주고 컴파일 해야 한다. 


-O2: 커널은 인라인 함수를 주로 사용하기 때문에 모듈은 이 옵션 플래그를 사용해야 한다. 이 옵션을 사용하지 않은 경우 어떤 어셈블러 매크로는 함수 호출 시 정상적으로 작동하지 않을 것이다. insmod는 커널에서 원하는 함수를 찾지 못하고 결국 모듈의 적재는 실패할 것이다. 


-W -Wall: 프로그램에서의 실수는 당신의 시스템을 다운 시킬 수도 있다. 컴파일러 경고 기능은 항상 켜둬라, 이것은 모듈 컴파일 뿐 아니라 당신의 모든 컴파일 행위에 적용된다. 


-isystem /lib/modules/uname -r/build/include: 컴파일 대상이 되는 커널의 헤더를 사용해야만 한다. 기본적인 /usr/include/linux를 사용하는 것은 작동하지 않을 것이다. 


-DKERNEL:이 심볼을 정의 하는 것은 헤더 파일에 이 코드가 유저 프로세스로 동작하지 않고 커널 모드에서 작동한다는 사실을 알린다. 


-DMODULE: 이 심볼은 헤더 파일에 커널 모듈을 위한 올바른 정의를 하게 한다. 


이름을 정해준대로 쓰거나

int init_module(void);

void cleanup_module(void); 


module_init / module_exit 매크로를 통해 연결해 주거나
int hello_2_init(void);
static void hello_2_exit(void);
module_init(hello_2_init);
module_exit(hello_2_exit);


표준 라이브러리는 사용할 수 없다. 당신이 커널 모듈에서 사용 할 수 있는 함수는 /proc/ksyms에서 보이는 함수들 뿐이다. 

[링크 : https://wiki.kldp.org/wiki.php/KernelModuleProgrammingGuide]


/proc/ksyms 가 2.6 에서는 /proc/kallsyms 로 바뀌었습니다.

[링크 : https://kldp.org/node/27882]


커널에서 FP 쪽은 데이터 주고 받는 용도로 써서 floating point 연산불가

math 라이브러리도 사용불가 -_-

[링크 : http://stackoverflow.com/.../how-to-include-math-h-include-math-h-on-kernel-source-file]


[링크 : http://hisjournal.net/./The_Linux_Kernel_Module_Programming_Guide_v2.6_by_YoonMin_Nam.pdf]

[링크 : http://www.joinc.co.kr/.../system_programing/proc/ProcFsPrograming] proc fs

'Linux API > linux' 카테고리의 다른 글

pthread mutex shm_open  (0) 2016.06.27
리눅스 동적 라이브러리(*.so) 사용하기  (0) 2016.04.04
readl(), writel()  (0) 2015.11.06
리눅스 모듈 프로그래밍 관련  (0) 2015.10.30
linux open mode  (0) 2015.10.29
Posted by 구차니

댓글을 달아 주세요

Linux API/linux2015. 11. 6. 11:09


커널 모듈 소스에서 보다 발견

결론은.. 걍 포인터?


[링크 : http://lxr.free-electrons.com/source/arch/mn10300/include/asm/io.h#L38]


109 #ifndef readb

110 #define readb readb

111 static inline u8 readb(const volatile void __iomem *addr)

112 {

113         return __raw_readb(addr);

114 }

115 #endif

116 

117 #ifndef readw

118 #define readw readw

119 static inline u16 readw(const volatile void __iomem *addr)

120 {

121         return __le16_to_cpu(__raw_readw(addr));

122 }

123 #endif

124 

125 #ifndef readl

126 #define readl readl

127 static inline u32 readl(const volatile void __iomem *addr)

128 {

129         return __le32_to_cpu(__raw_readl(addr));

130 }

131 #endif

132 

133 #ifdef CONFIG_64BIT

134 #ifndef readq

135 #define readq readq

136 static inline u64 readq(const volatile void __iomem *addr)

137 {

138         return __le64_to_cpu(__raw_readq(addr));

139 }

140 #endif

141 #endif /* CONFIG_64BIT */

142 

143 #ifndef writeb

144 #define writeb writeb

145 static inline void writeb(u8 value, volatile void __iomem *addr)

146 {

147         __raw_writeb(value, addr);

148 }

149 #endif

150 

151 #ifndef writew

152 #define writew writew

153 static inline void writew(u16 value, volatile void __iomem *addr)

154 {

155         __raw_writew(cpu_to_le16(value), addr);

156 }

157 #endif

158 

159 #ifndef writel

160 #define writel writel

161 static inline void writel(u32 value, volatile void __iomem *addr)

162 {

163         __raw_writel(__cpu_to_le32(value), addr);

164 }

165 #endif

166 

167 #ifdef CONFIG_64BIT

168 #ifndef writeq

169 #define writeq writeq

170 static inline void writeq(u64 value, volatile void __iomem *addr)

171 {

172         __raw_writeq(__cpu_to_le64(value), addr);

173 }

174 #endif

175 #endif /* CONFIG_64BIT */


[링크 : http://lxr.free-electrons.com/source/include/asm-generic/io.h#L127] 


'Linux API > linux' 카테고리의 다른 글

리눅스 동적 라이브러리(*.so) 사용하기  (0) 2016.04.04
리눅스 커널 모듈 관련 문서  (0) 2015.11.06
리눅스 모듈 프로그래밍 관련  (0) 2015.10.30
linux open mode  (0) 2015.10.29
named pipe / mkfifo()  (0) 2015.10.27
Posted by 구차니

댓글을 달아 주세요

Linux API/linux2015. 10. 30. 15:32


int register_blkdev (unsigned int major, const char * name);

[링크 : https://www.kernel.org/doc/htmldocs/kernel-api/API-register-blkdev.html]


int __register_chrdev ( unsigned int major,

  unsigned int baseminor,

  unsigned int count,

  const char * name,

  const struct file_operations * fops);


[링크 : http://linux.die.net/lkmpg/x892.html]

[링크 : http://linux.die.net/lkmpg/x569.html]

[링크 : https://wiki.kldp.org/KoreanDoc/html/EmbeddedKernel-KLDP/device-understanding.html]

'Linux API > linux' 카테고리의 다른 글

리눅스 커널 모듈 관련 문서  (0) 2015.11.06
readl(), writel()  (0) 2015.11.06
linux open mode  (0) 2015.10.29
named pipe / mkfifo()  (0) 2015.10.27
signal  (0) 2015.10.26
Posted by 구차니

댓글을 달아 주세요

Linux API/linux2015. 10. 29. 11:08

퍼미션 비트 관련 플래그 정리




[링크 : http://www.gnu.org/software/libc/manual/html_node/Permission-Bits.html]

'Linux API > linux' 카테고리의 다른 글

readl(), writel()  (0) 2015.11.06
리눅스 모듈 프로그래밍 관련  (0) 2015.10.30
named pipe / mkfifo()  (0) 2015.10.27
signal  (0) 2015.10.26
select()  (0) 2015.10.26
Posted by 구차니

댓글을 달아 주세요

Linux API/linux2015. 10. 27. 13:17


[링크 : http://akj61300.blog.me/80133137262]


전혀 관련없는 프로세스들 사이에서 pipe를 이용해서 통신을 하려면 pipe에 이름이 주어져야 한다. named pipe 를 만든 이유다.

[링크 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/system_programing/Book_LSP/ch08_IPC]


만들어진 fifo 파일의 크기는 해당 파일에 대한 입력이 있더라 하더라도 그 크기는 언제나 0인데 이유는 입력이 파일로 쌓이지 않고, 커널에서 이를 처리하기 때문 이다. 만들어진 fifo 파일은 PIPE 와 달리, 프로세스가 종료하거나, 시스템을 리부팅 시키더라도 사라지지 않으며(파일이니 당연하다), 직접 지워줄때까지 살아있게 된다. 리눅스에서는 FIFO를 만들도록 도와주는 mkfifo(2)라는 프로그램도 있으므로, FIFO 파일을 만들기 위해서 굳이 위의 예제처럼 fifo.c 파일을 만들필요는 없을 것이다.


만들어진 FIFO 파일로의 읽기및 쓰기는 보통의 파일을 위해서 사용하는 open(2)과 fopen(3) 등 일반적인 파일 열기/엑세스 함수군을 사용하면 된다.

[링크 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/system_programing/IPC/FIFO]


#include <sys/types.h>

#include <sys/stat.h>


int mkfifo(const char *pathname, mode_t mode);


[링크 : http://linux.die.net/man/3/mkfifo]


+

네임드 파이프 사용법

[링크 : http://unabated.tistory.com/entry/named-pipe-FIFO]

'Linux API > linux' 카테고리의 다른 글

리눅스 모듈 프로그래밍 관련  (0) 2015.10.30
linux open mode  (0) 2015.10.29
signal  (0) 2015.10.26
select()  (0) 2015.10.26
mmap / ioremap  (0) 2015.10.21
Posted by 구차니

댓글을 달아 주세요