LINUX
Posts
487 posts[Kernel][Workqueue] flush_work(), 배리어 워크(barrier_work, wq_barrier)
barrier work에 대해서 알아보겠습니다. flush_work 함수는 두 가지 상황에서 쓰입니다. 두 가지 경우에 barrier work가 어떻게 쓰이는지 알아볼게요. 1. 현재 다른 워커 쓰레드에서 동일한 워크가 실행 중에 동일한 work을 flush한 경우 -386 [001] ...1 143.380287: workqueue_execute_start: work struct e880e910: function sdhci_pm_qos_cpu_unvote_work//... mmc-cmdqd/0-339 [000] ...1 143.381065: flush_work
[Linux][Kernel] list_for_each_entry_safe() vs list_for_each_entry()
이번에는 list_for_each_entry_safe()와 list_for_each_entry() 매크로 함수 차이점에 대해서 살펴봅시다.둘 다 리눅스 커널에서 굉장히 많이 쓰는 함수이니 동작을 잘 알아두면 좋습니다. list_for_each_entry_safe() 함수 구현부는 다음과 같습니다.#define list_for_each_entry_safe(pos, n, head, member) \ for (pos = list_first_entry(head, typeof(*pos), member), \ n = list_next_entry(pos, member); \ &pos->member != (head); \ pos = n, n = list_next_entry
[라즈베리파이] 커널 타이머 - 동적 타이머 실행 코드
동적 타이머를 초기화만 하면 동적 타이머를 쓸 수 없습니다. 동적 타이머를 실행해야 합니다. 이를 위해 add_timer()/add_timer_on() 이나 mod_timer() 함수에 적절한 인자를 채워 호출해야 합니다. 보통 add_timer() 함수를 써서 동적 타이머를 실행하며 이후 동적 타이머 만료 시간을 다시 설정한 후 동적 타이머를 실행시킬 때 mod_timer() 함수를 씁니다. add_timer()와 mod_timer() 함수를 써서 로컬 타이머를 설정하는 코드를 살펴보겠습니다. 먼저 라즈비안에서 로컬 타이머를 실행하는 코드를 봅시다.1 bool bcm2835_sdhost_send_command(struct bcm2835_host *host,2 struct mmc_command
[bash: grep] 파일에 저장된 여러개의 검색어를 포함 또는 제외한 내용 출력하기
몇개의 문자열에 대한 검색은 기본적인 grep 명령으로 그 자리에서 작업을 해도 큰 문제가 없을 것이다.(grep을 이용한 다중 문자열 검색은 이전 게시물을 참고하자. 여기로) # my_data.txt에서 문자열 abc 또는 123이 포함된 행 출력 cat my_data.txt | grep "abc\|123" 그러나, 꽤 많은 검색어가 있고 이 검색어들을 제외한 나머지 내용을 찾고자 할 때는 문제가 좀 복잡해 진다. 예를 들어 keyword.txt 파일에 10개 이상의 검색어가 저장되어 있고, my_data.txt 파일에서 이 검색어를 포함 또는 제외한 내용을 출력해야 하는 경우다. 일일이 수작업으로 확인하기 검색해야할 문자열이 너무 많다. 이럴 경우엔 배열(array)을 이용해서 검색어를
![[CV] [Comi] 'ダンダダン'(단다단) 24권. 레드 바론](https://img.zoomtrend.com/2026/06/11/1781228393-EB829CED8380.jpg)

